最近在读G1的一些东西,有几个疑惑?
1、G1的mix gc 属于什么类型的垃圾回收?我理解每次都要把存活对象拷贝到其他region,所以我觉着属于标记-复制,不知道这样理解是不是对的?
2、G1的mix gc collection set是在什么时候构建的?是在并行标记之前还是并行标记后要进行回收的时候构建的?
3、G1并行标记的时候是扫描整个堆的所有region还是固定的region呢?
望指点!
最近在读G1的一些东西,有几个疑惑?
1、G1的mix gc 属于什么类型的垃圾回收?我理解每次都要把存活对象拷贝到其他region,所以我觉着属于标记-复制,不知道这样理解是不是对的?
2、G1的mix gc collection set是在什么时候构建的?是在并行标记之前还是并行标记后要进行回收的时候构建的?
3、G1并行标记的时候是扫描整个堆的所有region还是固定的region呢?
望指点!
15 回答8.4k 阅读
8 回答6.2k 阅读
1 回答4k 阅读✓ 已解决
3 回答6k 阅读
3 回答2.2k 阅读✓ 已解决
2 回答3.1k 阅读
2 回答3.8k 阅读
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。