G1 垃圾回收的几个疑惑?

最近在读G1的一些东西,有几个疑惑?
1、G1的mix gc 属于什么类型的垃圾回收?我理解每次都要把存活对象拷贝到其他region,所以我觉着属于标记-复制,不知道这样理解是不是对的?
2、G1的mix gc collection set是在什么时候构建的?是在并行标记之前还是并行标记后要进行回收的时候构建的?
3、G1并行标记的时候是扫描整个堆的所有region还是固定的region呢?
望指点!

阅读 2.3k
1 个回答

1、G1是标记-压缩算法。

Mix gc触发条件是堆内存中老年代使用达到-XX:InitiatingHeapOccupancyPercent。会首先经历并发标记周期 Concurrent Marking Cycle,识别出高收益的老年代分区,然后会等一次YGC,然后才是mix gc(与YGC过程差不多)。

2、年轻代收集(YGC)的CSet容纳且容纳所有的年轻代分区,而混合收集(Mixed GC)会通过启发式算法,在老年代候选回收分区中,筛选出回收收益最高的分区添加到CSet中。

候选老年代分区的CSet准入条件,可以通过活跃度阈值-XX:G1MixedGCLiveThresholdPercent(默认85%)进行设置,从而拦截那些回收开销巨大的对象;

同时,每次混合收集可以包含候选老年代分区,可根据CSet对堆的总大小占比-XX:G1OldCSetRegionThresholdPercent(默认10%)设置数量上限。

3、G1并行标记不是所有的region都扫描,是基于响应目标计算的。从gc root 开始扫描RSet,收集CSet。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题