CodeWalk

G1垃圾收集器的混合回收过程

作者:专业代码师 · 2026-05-30 12:55

请详细说明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(混合回收次数)。