zgc要求cpu至少4核、堆内存建议6gb以上,需配合numa和大页优化,仅支持jdk15+且受限于操作系统与架构。核数不足或堆过小会放大其cpu开销与回收退化问题,未配大页则tlb miss增多致停顿超标。

ZGC 对 CPU 核数和内存大小有明确的适用边界,不是“越大越好”,而是需要匹配其并发设计与硬件资源约束。选错配置反而会放大它的缺点,比如 CPU 占用飙升或回收退化。
CPU 核数:至少 4 核起,单核/双核禁用
ZGC 是高度并发的回收器,依赖多线程并行执行标记、转移、重定位等阶段。它在运行时会启动多个 GC 线程(通常为 CPU 核数的 1/4~1/2),同时还要与所有应用线程共存。
- 单核或双核环境:GC 线程与用户线程严重争抢 CPU,导致 STW 时间不可控、吞吐骤降,甚至触发阻塞式 Full GC
- 推荐最低配置:4 核以上,保障 GC 线程有独立调度余量
- CPU 负载持续 >60% 时:ZGC 的并发回收速度下降,易出现内存分配速率 > 回收速率,引发“浮动垃圾”堆积或退化停顿
内存大小:8MB 起步,6GB 以上才真正发挥优势
ZGC 的设计目标是大堆低延迟,小堆反而不经济。它取消分代、全堆并发扫描、使用染色指针和多重映射,这些机制本身有固定开销。
- ≤ 6GB 堆:G1GC 通常更均衡;ZGC 在此区间停顿虽低,但 CPU 开销明显高于 G1,收益不显著
- ≥ 6GB 堆:尤其 12GB、32GB、100GB+ 场景,ZGC 的停顿稳定性优势凸显——停顿时间基本稳定在 10ms 内,且不随堆增长而变长
- 支持范围:官方支持 8MB ~ 16TB 堆(JDK15+),但生产环境建议从 6GB 起评估,12GB 以上优先实测 ZGC
硬件协同要求:NUMA 与大页(Huge Pages)不是可选项
ZGC 默认启用 NUMA 感知,能自动将对象分配到靠近对应 CPU 的本地内存;但它对内存访问效率极度敏感,裸机部署必须配合系统级优化。
- NUMA 架构服务器:ZGC 会自动绑定线程与本地内存节点,若关闭 NUMA 或跨节点频繁访问,延迟会明显上升
- Linux 大页(Huge Pages):强烈建议启用 2MB huge pages。例如 16GB 堆需至少 8192 个 huge page;预留 10–15% 额外页供 marking bitmaps、code heap 等非堆结构使用
- 未配大页时:ZGC 仍可运行,但 TLB miss 增多,GC 周期中并发阶段耗时上升,可能突破 10ms 边界
版本与平台限制:别踩历史坑
ZGC 不是“开箱即用”的通用回收器,早期版本存在硬性约束,当前(JDK21+)已大幅放宽,但仍有底线。
- 操作系统:仅支持 Linux/x64(JDK11–15)、Linux/Aarch64(JDK16+)、Windows/x64(JDK16+)、macOS/x64(JDK17+)。macOS M 系列芯片暂不支持
- JDK 版本:JDK11 是实验版,JDK15 起默认可用,JDK21+ 生产就绪。避免在 JDK8/11 中强行启用 ZGC
- 堆压缩:JDK21+ 支持 -XX:+UseCompressedOops 配合 ZGC,旧版本需关闭压缩指针(-XX:-UseCompressedOops),否则启动失败











