CMS 有 4 个高级阶段适用于完整的 GC
- 初始标记:- 停止世界(STW)
- 并发标记:-同时运行
- 备注 :- STW
- 并发扫描:- 并发运行
阅读后我对CMS有了高度的了解
http://www.tikalk.com/java/garbage-collection-serial-vs-parallel-vs-concurrent-mark-sweep/和https://plumbr.eu/handbook/garbage-collection-algorithms-implementations/concurrent -标记和扫描
我的问题是为什么初始标记阶段是 STWInitial Mark
阶段?我们不能将 Remark 阶段设置为 STW,因为这是和解的最后阶段。
同样,为什么Sweeping phase
不是 STW,因为它需要压缩,这意味着对象的物理位置的变化。因此,如果应用程序引用了对象并且并发线程更改了物理位置,那不是问题吗?
我知道我在这里遗漏了一些东西,但那是什么?