Welcome toVigges Developer Community-Open, Learning,Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
395 views
in Technique[技术] by (71.8m points)

G1 垃圾回收的几个疑惑?

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

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。


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to Vigges Developer Community for programmer and developer-Open, Learning and Share
...