了解GC G1-并发标记阶段

时间:2019-05-06 12:01:53

标签: jvm g1gc

我正在尝试了解有关GC G1的一些信息,希望大家能帮助我。

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

据我了解,它的作用是标记从根区域(在并行标记阶段是在“初始标记”部分中选择的幸存者区域)可到达的所有活动对象,并估计旧区域的生命力(基于此)他们将被选择到混合疏散暂停的集合集合中。我说的对吗?

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

如果我理解正确,请混合使用疏散暂停标记,并删除GC根目录和记住的集无法到达的对象。并发标记标记的是一组不同的对象,因此这些对象可以重叠,但不必重叠。我说的对吗?

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

  2. 下面的我的摘要正确吗?

完全年轻的收藏会标记来自伊甸园和幸存者地区的所有活物(这意味着GC根系可以到达),并将它们撤离(复制)到新的幸存者(或旧)地区。其余对象被视为垃圾并已删除。回收免费区域。

同时标记阶段在开始时标记所有幸存者区域,这些区域可能参考了旧区域(基于记忆的集合?)。此处将幸存者区域视为GC的根,因为这部分发生在完全年轻的收集期间,因此我们确定其中的所有对象都存在。然后,GC会检查对象图(从选定的幸存者区域中的对象开始)并标记所有活动对象。

在混合疏散暂停中,根据活动统计信息(在上一阶段进行了计数),选择了一些旧区域作为集合集。然后,将来自选定区域的所有活动对象撤离(复制)到新区域(活动方式:a。在同时标记期间选择,b。如在标准疏散暂停中一样-可以从GC根目录和已记住的集合中到达)。其余对象将作为垃圾被回收,并回收区域。

1 个答案:

答案 0 :(得分:1)

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

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

“并发”仅表示在多个根上同时进行。


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

没有。

目标是仅标记活动对象。任何未标记为活动的内容都将自动(正确)假定为死亡。


  1. GC根到底是什么?对于年轻的和混合的集合,它们是否相同(混合集合中记忆集中的引用除外)?
This article中链接的

another SO question列出了以下四种GC根类型:

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

根的定义不依赖于集合集。根是任何GC生成或集合中的根。


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

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