1. G1 GC region 设计(默认 2048 个 region)?
G1 GC 的 region 设计(默认 2048 个 region)是什么?它如何工作?
- region 的划分与大小
- 增量收集与可预测停顿
- 年轻代/老年代在 region 上的布局
G1(Garbage First)把堆划分为固定大小的 region(默认最多 2048 个,每个 region 大小由堆大小决定,1MB-32MB,为 2 的幂次)。region 是 G1 实现增量收集的基础:年轻代、老年代、Humongous(大对象)都由 region 组成,但 region 不再固定归属某代,而是动态分配。G1 追踪各 region 的垃圾占比,优先回收垃圾最多的 region("Garbage First"),每次只收集一部分 region,从而把停顿控制在一个可预测的范围内(停顿目标,如 200ms)。通过 SATB 和 RSet 实现并发标记与跨 region 引用跟踪。
region 把"整堆"拆成"可增量处理的小单元",让 GC 可以分段收集、控制停顿。这是 G1 相比"整堆整理"的 CMS 的关键进步,也是其停顿可预测的基础。