ZGC通过取消分代结构和全程并发回收,从根本上消解了Full GC的触发逻辑与存在必要性;它采用统一地址空间、三类Region分配及毫秒级根扫描,避免老年代瓶颈与全局停顿。

ZGC本身不追求“避免Full GC”,而是从根本上消解了传统意义上Full GC的触发逻辑和存在必要性。它不依赖分代假设、不设独立的老年代空间、不执行全局标记-清除式回收,因此不会出现因老年代填满而强制停顿全堆的场景。
取消分代结构,消除老年代瓶颈
ZGC采用统一的连续地址空间管理,不划分新生代/老年代。所有对象按大小分配到小、中、大三类Region中,回收决策基于局部内存压力而非代际晋升路径。这意味着:
- 没有“对象晋升失败”或“老年代空间不足”这类Full GC经典诱因
- 不再需要为Survivor区大小、TenuringThreshold等参数调优
- 长期存活对象与短期对象共存于同一内存视图,由并发重定位动态整理
全程并发回收,STW仅限毫秒级根扫描
ZGC所有关键阶段(标记、重定位、引用更新)均与应用线程并发执行。唯一STW阶段仅用于初始根集扫描(Root Scan),通常耗时
- 染色指针 + 读屏障确保并发访问时对象状态一致性
- 重定位过程在后台线程完成,应用线程通过读屏障自动获取新地址
- 即使堆达4TB,暂停时间仍稳定在亚毫秒至几毫秒区间
主动式内存管理,预防性触发回收周期
ZGC通过参数实现对内存分配节奏的主动干预,把压力分散在多次轻量级GC中:
- -XX:ZAllocationSpikeTolerance:检测突发分配,容忍度越高越早启动GC
- -XX:ZCollectionInterval:空闲期强制触发低负载GC,避免内存持续堆积
- -XX:+ZProactive:在应用空闲时提前整理内存,提升后续响应速度
不依赖元空间触发机制,独立管控非堆内存
ZGC不处理Metaspace回收,但其设计使元空间问题不再连带引发全堆停顿:
- Metaspace不足触发的GC是独立事件,ZGC自身不会因此升级为“Full GC”
- 可通过-XX:MaxMetaspaceSize和-XX:MetaspaceSize单独控制,不影响ZGC运行节奏
- 配合ZGC使用时,元空间GC通常为轻量级,且不阻塞ZGC并发流程

















