繁体   English   中英

理解 GC G1 - 并发标记阶段

[英]Understanding GC G1 - Concurrent Marking phase

我试图了解一些关于 GC G1 的事情,希望你们能帮助我。

  1. GC G1 中整个 Concurrent Marking 阶段的作用到底是什么? 我的意思是所有部分(初始标记、根区域扫描、...、清理)。

据我了解,它的作用是标记从根区域可到达的所有活动对象(在并发标记阶段是在“初始标记”部分选择的幸存者区域)并估计旧区域的活动度(根据它们将被选择收集设置为混合疏散暂停)。 我对吗?

  1. 在混合疏散暂停期间,哪些对象在旧区域被标记为垃圾?

如果我理解正确,混合疏散暂停标记并删除 GC 根和记忆集无法访问的对象。 并发标记标记的是不同的对象集,因此这些对象可能会重叠,但它们不必重叠。 我对吗?

  1. GC 根到底是什么? 它们对于新集合和混合集合是否相同(混合集合中记忆集合的引用除外)?

  2. 我下面的总结正确吗?

完全年轻的集合标记来自伊甸园和幸存者区域的所有活动对象(这意味着 GC 根可到达),并将它们撤出(复制)到新的幸存者(或旧)区域。 其余的对象被视为垃圾并被删除。 自由区域被回收。

开始时的并发标记阶段标记所有可能引用旧区域的幸存者区域(基于记住的集合?)。 存活区域在这里被视为 GC 根,因为这部分发生在完全年轻的收集期间,因此我们确信其中的所有对象都存在。 然后 GC 遍历对象图(从选定的幸存者区域的对象开始)并标记所有活动对象。

在混合疏散暂停中,根据活跃度统计(在前一阶段计算),选择一些旧区域进行收集。 然后来自选定区域的所有活动对象都被疏散(复制)到新区域(活动意味着:a. 在并发标记期间选择和 b. 在标准疏散暂停中 - 可以从 GC 根和记住的集合访问)。 其余对象作为垃圾被删除,区域被回收。

  1. GC G1 中整个 Concurrent Marking 阶段的作用到底是什么? 我的意思是所有部分(初始标记、根区域扫描、...、清理)。

标记阶段的作用是从根开始,向下遍历到根的所有连接组件,并将它们标记为活动状态

“并发”只是意味着这是在多个根上同时进行的。


  1. 在混合疏散暂停期间,哪些对象在旧区域被标记为垃圾?

没有任何。

目标是仅标记活动对象。 任何未标记为 live 的东西,都会自动(正确地)假定为死亡。


  1. GC 根到底是什么? 它们对于新集合和混合集合是否相同(混合集合中记忆集合的引用除外)?

这篇文章链接在另一个 SO 问题中,列出了以下四种类型的 GC 根:

  1. 局部变量;
  2. 活动线程;
  3. 静态变量; 和,
  4. JNI 参考。

root 的定义与集合集无关。 根是任何 GC 生成或集合中的根。


  1. 我下面的总结正确吗?

所有四个问题中最棘手的问题。 请允许我跳过这一点。 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM