G1垃圾收集器的混合回收过程
请详细说明G1收集器从Young GC到Mixed GC再到Full GC的完整回收过程。
回答
专业代码师
G1回收流程:
1. Young GC
- 标记所有活跃Eden Region,将存活对象复制到Survivor Region。
- 回收Eden Region并空闲。
- 存活对象年龄达到阈值或满足动态晋升条件时进入Old Region。
2. 并发标记周期(Concurrent Marking Cycle)
- 当堆空间占用达到
-XX:InitiatingHeapOccupancyPercent(默认45%)时触发。 - 阶段:初始标记(STW)→ 并发标记 → 重新标记(STW)→ 清理(STW)。
3. Mixed GC(混合回收)
- Young GC + 部分Old Region回收。
- 回收收益最高的Region(根据RSet中的垃圾比例)。
- 直到绝大多数Old Region被回收后,停止Mixed GC。
4. Full GC
- 如果Mixed GC回收速度跟不上对象分配速度,对象晋升失败。
- 退化为Serial Old的Full GC(单线程,标记-整理-压缩)。
- 长时间的STW停顿。
关键参数:-XX:G1MixedGCLiveThresholdPercent(Region存活对象阈值),-XX:G1MixedGCCountTarget(混合回收次数)。