启用ZGC需同时指定-XX:+UseZGC及相等的-Xms与-Xmx值,堆大小建议为存活对象的2–3倍且不超物理内存70%;JDK 15+生产就绪,8GB–64GB堆选ZGC,≥64GB或亚毫秒需求用JDK 21+分代ZGC;关键日志验证停顿≤10ms且ZGC周期耗时占比<0.5%。

直接启用 ZGC 并配准堆大小,是实现超低延迟回收最核心的两步。它不靠“微调参数”起效,而是依赖正确启动方式和内存结构设计。
必须显式启用并固定堆大小
ZGC 不接受默认堆策略或动态伸缩。启动时必须同时指定 -XX:+UseZGC 和等值的初始/最大堆:
-
-Xms 和 -Xmx 必须相等,例如
-Xms32g -Xmx32g,避免运行中扩容触发额外停顿 - 堆大小建议为应用存活对象(live set)的 2–3 倍;可通过
jmap -histo <pid></pid>估算 - 总堆不超过物理内存的 70%,为元空间、直接内存和 OS 缓存留出余量
按场景选对堆规模与 JDK 版本
ZGC 的低延迟能力与版本和堆配置强相关,不能跨版本套用参数:
分析 Java Spring Boot 后端 Controller 代码,自动生成 Markdown 格式的接口文档。当用户说“生成 Java 接口文档”、“生成 API 文档”、“从 Spring 代码生成文档”时触发。
- JDK 15+ 才正式生产就绪;JDK 17 起支持 macOS(Apple Silicon / Intel)
- 8GB–64GB 堆:ZGC 是首选,99% 停顿稳定在 10ms 内
- ≥64GB 或严苛亚毫秒需求:JDK 21+ 分代 ZGC 可达 1–3ms,且停顿不随堆增大而上升
- 超大堆(如 4TB)需确认 JDK 版本支持:Java 15 支持 16TB,但需搭配
-Xmx4t等单位明确写法
关键辅助参数要慎用,非必加
多数生产环境无需额外调参。仅当出现特定问题时才考虑以下选项:
立即学习“Java免费学习笔记(深入)”;
- -XX:ZAllocationSpikeTolerance=1.5:降低分配突增容忍度,适合流量毛刺明显的场景,但可能小幅抬升 CPU
- -XX:ZCollectionInterval=5:强制每 5 秒触发一次并发收集,适用于空闲后需快速响应的长周期服务
- -XX:+ZProactive:开启主动回收,在应用空闲期预清理内存,提升突发请求响应速度
- 不建议手动设 -XX:ConcGCThreads,默认值已根据 CPU 核心数自动优化
必须开启日志验证效果
调参后不看日志等于没调。用标准日志确认是否真低延迟:
- 加参数:
-Xlog:gc*:file=gc.log:time,uptime,tags(JDK 10+) - 重点检查日志中
Pause Mark Start→Pause Mark End区间,单次应 ≤10ms - 配合
jstat -gc <pid></pid>查看ZGC pauses总耗时占比,理想值应低于 0.5% - 避免混淆:ZGC 没有 YGC / Full GC 概念,所有回收都是并发周期(ZGC cycles)

















