我试图了解一些关于 GC G1 的事情,希望你们能帮助我。
据我了解,它的作用是标记从根区域可到达的所有 Activity 对象(在并发标记阶段是在“初始标记”部分选择的幸存者区域)并估计旧区域的 Activity 度(根据它们将被选择收集设置为混合疏散暂停)。我对吗?
如果我理解正确,混合疏散暂停标记并删除 GC 根和 memset 无法访问的对象。并发标记标记的是不同的对象集,因此这些对象可能会重叠,但它们不必重叠。我对吗?
完全年轻的集合标记来自伊甸园和幸存者区域的所有 Activity 对象(这意味着 GC 根可到达),并将它们撤出(复制)到新的幸存者(或旧)区域。其余的对象被视为垃圾并被删除。自由区域被回收。
开始时的并发标记阶段标记所有可能引用旧区域的幸存者区域(基于记住的集合?)。存活区域在这里被视为 GC 根,因为这部分发生在完全年轻的收集期间,因此我们确信其中的所有对象都存在。然后 GC 遍历对象图(从选定的幸存者区域的对象开始)并标记所有 Activity 对象。
在混合疏散暂停中,根据活跃度统计(在前一阶段计算),选择一些旧区域进行收集。然后来自选定区域的所有 Activity 对象都被疏散(复制)到新区域( Activity 意味着:a. 在并发标记期间选择和 b. 在标准疏散暂停中 - 可以从 GC 根和记住的集合访问)。其余对象作为垃圾被删除,区域被回收。
最佳答案
- What exactly is the role of whole Concurrent Marking phase in GC G1? I mean all parts (initial marking, root region scan, ..., cleanup).
标记阶段的作用是从根开始,向下遍历到根的所有连接组件并对其进行标记。
“并发”只是意味着这是在多个根上同时进行的。
- Which objects are marked as a garbage in old regions during mixed evacuation pause?
没有任何。
目标是仅标记 Activity 对象。任何未标记为 Activity 的东西,都会自动(正确地)假定为死亡。
- What exactly GC roots are? Are they the same for young and mixed collection (except references from remembered sets in mixed collection)?
This article链接在此 another SO question列出了以下四种类型的 GC 根:
root 的定义与集合集无关。根是任何 GC 生成或集合中的根。
- Is my summary below correct?
所有四个问题中最棘手的问题。请允许我跳过这一点。 :)
关于java - 理解 GC G1 - 并发标记阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56004805/