低延迟垃圾回收核心是选对收集器、设好目标停顿、配平堆结构并避开系统干扰:JDK11+优先用ZGC(-XX:+UseZGC),单次停顿稳定≤10ms;堆建议固定大小(如-Xms4g -Xmx4g),新生代占30%–40%,Metaspace需限容;必须开启GC日志监控,禁用swap与透明大页。

要配置低延迟垃圾回收,核心是选对收集器、设好目标停顿、配平堆结构,并避开系统级干扰。
选对低延迟收集器
根据 JDK 版本和实际延迟要求选择:
- JDK 11 及以上:优先用 -XX:+UseZGC,单次停顿基本稳定在 10ms 内,适合高频交易、实时风控、游戏服务器等场景;
- JDK 8–17:可用 -XX:+UseG1GC,配合 -XX:MaxGCPauseMillis=200(目标值,非硬限制),适用于 Web API、微服务等对响应敏感但不要求亚毫秒级的系统;
- JDK 12+ 也可考虑 Shenandoah,参数为 -XX:+UseShenandoahGC,停顿表现接近 ZGC,但需确认运行环境支持(如 Linux kernel ≥ 4.12)。
堆与分代参数要稳且偏小
低延迟不等于堆越大越好,反而需要避免大堆带来的长停顿风险:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 固定堆大小:-Xms4g -Xmx4g(按实际负载调整,建议不超过物理内存的 50%);
- 新生代不宜过小:对象分配快、生命周期短,推荐 -Xmn1.5g 或占堆 30%–40%,减少 YGC 频次;
- Survivor 区适当扩大:-XX:SurvivorRatio=4(Eden:S0:S1 = 4:1:1),降低对象过早晋升老年代概率;
- 元空间必须设限:-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m,防止动态类加载触发 Full GC。
必须开启监控并规避常见陷阱
没有监控的调参等于盲调:
立即学习“Java免费学习笔记(深入)”;
- 加日志:-Xlog:gc*:file=gc.log:time,uptime,level,tags(JDK 9+),关注 ZGC 的
Pause或 G1 的G1 Evacuation Pause时长; - 禁用 swap:echo 0 > /proc/sys/vm/swappiness,避免 GC 过程中因换页导致卡顿;
- 关闭透明大页:echo never > /sys/kernel/mm/transparent_hugepage/enabled,ZGC 和 G1 对 THP 敏感;
- 线程栈别太大:-Xss256k(默认 1M),高并发下大量线程会挤占堆外内存,间接影响 GC 行为。
不复杂但容易忽略。关键不在堆多大,而在每次停顿是否可控、可预期。

















