java - "final remark"中CMS的具体工作是什么?

标签 java garbage-collection concurrent-mark-sweep

来自plumbr's cookbook ,我已经看到了初始化标记、并发标记、并发预清理和并发可中止预清理的作用。

初始标记

enter image description here

并发标记 enter image description here

并发预清理 enter image description here

但我无法真正了解“最后的评论”。只再次遍历老年代?如果这样做的话,我认为前面的步骤就没有必要了。

最佳答案

并发标记清除有 4 个主要阶段。

  • 初始标记
  • 并发标记/并发预清理
  • 最后一句话
  • 扫一扫

并发标记清除的附加细节 - 年轻空间中的所有对象都被视为 GC 根。

并发标记是并发的主要原因是因为遍历旧空间中的对象图需要大量时间。 尽管后续标记要快得多,因为大多数对象已经标记并且不需要重新访问。

并发操作仍然无法保证一致的标记,因为线程继续更改对象图。需要停止世界才能 catch 。

“最后的评论”是涉及完整标记(根扫描+递归遍历)的停止世界阶段,但由于大多数对象已经被并发标记/预清理标记,因此递归遍历阶段通常很快。

您可以在我的 Understanding GC pauses in JVM, HotSpot's CMS collector 中找到更多详细信息文章。

关于java - "final remark"中CMS的具体工作是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57302294/

相关文章:

java - 为什么 CMS 在初始标记时会停止世界,但在扫描阶段不会停止世界?

java - 即使内存被回收,并发模式也会失败

java - 如何告诉 Java JAR 文件中正确的文件路径?

Java双向链表——两个相邻节点相等

java - 调用 System.gc() 导致 JSP 中的数据丢失

用于详细 gc 的 Linux 命令

Java GC CMS 收集器时间

java - JPA : Not able to persist record due to incorrect values being passed from client to server

java - Adb.exe 文件自动从平台工具中删除

java - sun.misc.Perf 文档或替代品