从plumbr 的食谱中,我看到了 init mark、concurrent mark、concurrent preclean 和 concurrent abortable preclean 的作用。
初始标记
但我无法得到关于“最后评论”的真正工作。只是再次遍历老一代?如果是这样的话,我认为前面的步骤是没有必要的。</p>
从plumbr 的食谱中,我看到了 init mark、concurrent mark、concurrent preclean 和 concurrent abortable preclean 的作用。
初始标记
但我无法得到关于“最后评论”的真正工作。只是再次遍历老一代?如果是这样的话,我认为前面的步骤是没有必要的。</p>
并发标记扫描有 4 个主要阶段。
Concurrent Mark Sweep 的附加特性 - 年轻空间中的所有对象都被视为 GC 根。
并发标记是并发的主要原因是因为在旧空间中遍历对象图需要大量时间。虽然后续标记要快得多,因为大多数对象已经标记并且不需要重新访问。
仍然并发操作不能保证一致的标记,因为线程继续改变对象图。停止世界需要赶上。
“Final remark”是一个涉及完全标记(根扫描+递归遍历)的停止世界阶段,但由于大多数对象已经被并发标记/预清理递归遍历阶段标记,因此通常很快。
您可以在HotSpot 的 CMS 收集器文章了解 JVM 中的 GC 暂停中找到更多详细信息。