CodeWalk

G1收集器的Region与SATB原理

作者:屠龙少年 · 2026-05-30 12:55

G1(Garbage First)收集器打破了传统的分代物理隔离,请解释Region、SATB、Humongous对象和Remembered Set的工作原理。

回答

屠龙少年

Region:G1将堆划分为2048个大小相同(1M~32M)的Region,每个Region可独立扮演Eden/Survivor/Old角色,解决了碎片问题。

SATB(Snapshot-At-The-Beginning):并发标记开始时取对象图的快照,并发期间通过写前屏障记录引用变化,确保对象图中新增的存活对象不会漏标。替代CMS的增量更新。

Humongous对象:大小 > Region 50%的对象直接分配到H区(连续多个Region),避免了频繁的大对象复制。

Remembered Set(RSet):每个Region维护一个RSet,记录谁引用了本Region中的对象。RSet使得GC时无需扫描整个堆即可找到跨Region引用,避免全堆扫描。

停顿预测模型:G1根据历史数据预测停顿时间,选择回收收益最大的Region集合(CSet)。