Java面试宝典:G1垃圾收集器下
G1垃圾收集器深入解析(下)
一、CSet(Collection Set 回收集合)
收集集合(CSet)是G1垃圾收集器每次GC暂停时需要回收的分区集合。在任意收集暂停中,CSet内的所有分区都会被回收,其中存活对象将被转移到空闲分区中。这种机制保证了无论是年轻代收集还是混合收集,其核心工作原理都是一致的。年轻代收集时CSet仅包含年轻代分区(Young Region),而混合收集会通过启发式算法筛选老年代候选分区,将回收收益最高的分区加入CSet。
CSet根据回收类型分为两种:
-
年轻代收集CSet (CSet of Young Collection)
专注于回收年轻代区域(Young Region)和幸存者区域(Survivor Region)。 -
混合收集CSet (CSet of Mix Collection)
通过RSet(记忆集)计算Region中对象的活跃度:
- 活跃度阈值由
-XX:G1MixedGCLiveThresholdPercent
控制(默认85%),仅当活跃度低于此阈值的Region才准入CSet - 通过
-XX:G1OldCSetRegionThresholdPercent
(默认10%)限制CSet中老年代分区占整个堆的比例上限