g1是停顿时间可预测的垃圾收集器,通过将堆划分为大小相等的region、动态选择回收集、内置停顿时间预测模型及remembered set机制,在可控stw内实现部分压缩与碎片缓解。

G1 被称为“停顿时间可预测的收集器”,核心在于它把堆划分为多个大小相等的区域(Region),并支持以 指定最大暂停时间目标(MaxGCPauseMillis)为约束条件,动态选择回收哪些 Region,而不是像 CMS 或 Parallel GC 那样固定回收整个老年代或新生代。
基于 Region 的增量式回收
G1 不再区分严格意义上的年轻代/老年代空间,而是将堆划分为若干个 1–32MB 的独立 Region。每次 GC 可以只回收其中一部分 Region(尤其是那些垃圾多、耗时少的),从而把单次 STW 时间控制在目标范围内。
- 年轻代回收(Young GC)仍按 Region 批量进行,但可快速完成
- 混合回收(Mixed GC)阶段会根据预测模型,挑选收益高、耗时低的老年代 Region 加入回收集
- 回收集(Collection Set, CSet)大小受停顿目标限制,不是“全量”或“固定比例”
停顿时间预测模型
G1 内置一套历史统计与衰减平均机制,持续记录每个 Region 的:
- 扫描耗时(Remembered Set 处理、对象遍历)
- 转移耗时(对象复制、引用更新)
- 已知存活对象大小(用于估算复制工作量)
每次 GC 前,G1 用这些数据预测本次能安全纳入多少 Region,保证总 STW 不超过用户设定的 -XX:MaxGCPauseMillis(默认 200ms)。
避免全堆扫描与碎片化妥协
传统 GC(如 CMS)为降低停顿而放弃压缩,导致碎片化严重;Parallel GC 虽压缩但停顿不可控。G1 在可控停顿内做部分压缩(Region 级复制),既缓解碎片,又不牺牲响应性。
- 通过 Remembered Set 快速定位跨 Region 引用,无需全局卡表扫描
- 每次回收都伴随内存整理,长期运行不易因碎片触发 Full GC
- 当预测失败(实际停顿超限),G1 会自动调整下次回收策略,比如减少 CSet 规模或增加并发标记频率
本质上,G1 的“可预测”不是绝对精确,而是基于统计反馈的主动调控能力——它把 GC 从“尽力而为”变成了“按需交付”。











