18 各个GC的内存布局

vvEcho 2026-03-18 14:55:24
Categories: Tags:

CMS

+——————+ <— 年轻代
| Eden |
+——————+
| Survivor 0 |
+——————+
| Survivor 1 |
+——————+
| 老年代 (Old Gen) | <— CMS 回收区域
+——————+
| 元空间 (Metaspace) |
+——————+

特点:
年轻代:Minor GC → Stop-The-World,复制收集(Eden → Survivor)
老年代:CMS 并发标记 + 清理,停顿低,但可能 浮动垃圾 → 可能触发 Full GC
大对象 / Humongous Object 放在老年代

优点:停顿比 Parallel Old GC 短
缺点:容易碎片,浮动垃圾可能导致 Full GC

G1

G1 属于 Region-based GC,可控制停顿时间,适合大堆。
堆布局
+——————————-+
| 年轻代 (Young Regions) |
| - Eden Region(s) |
| - Survivor Region(s) |
+——————————-+
| 老年代 (Old Regions) |
+——————————-+
| Humongous Regions |
+——————————-+
| 元空间 (Metaspace) |
+——————————-+

特点
堆被划分为 固定大小的 Region(1~32MB 可配置)
每次 GC 回收最“垃圾最多”的 Region → 名字 Garbage-First
年轻代 Region:Minor GC(Stop-The-World)
老年代 Region:Mixed GC + 并发标记
Humongous Object(>Region大小的一半)单独分配

优点:停顿可控(-XX:MaxGCPauseMillis)、大堆友好
缺点:较复杂,需要 Region 管理

ZGC

ZGC 属于 超低延迟 GC,停顿 <1ms,支持 TB 级堆。
核心特点:Region + Colored Pointers + Concurrent GC

堆布局
+———————————+
| 年轻代 (Young Regions) |
+———————————+
| 老年代 (Old Regions) |
+———————————+
| Humongous Regions |
+———————————+
| 元空间 (Metaspace) |
+———————————+
| 其他辅助数据结构 (Mark/Remap) |
+———————————+

特点
分代 + Region,类似 G1,但几乎所有 GC 操作都是并发
停顿极低:
Minor / Full GC 都 <1ms
通过 colored pointers 解决对象移动问题
Humongous Object → 独立管理
内存几乎无碎片

ZGC 基于region + colored pointer,所有 GC 并发,停顿 <1ms,非常适合超大堆和低延迟业务

总结:
CMS 的堆是传统分代堆,老年代用并发标记清理,停顿低但容易碎片;
G1 将堆划分为固定大小 Region,通过回收垃圾最多的 Region 控制停顿,Mixed GC 可同时回收年轻代和老年代
ZGC 也是 Region 堆,但采用 colored pointer 和全并发 GC,停顿极低,几乎无碎片,非常适合TB级堆和低延迟业务。