选型关键在于匹配而非最新:堆大小、延迟敏感度、cpu资源、jdk版本四要素确定后,gc方案即明确;小内存单核或客户端场景适用serial gc,大堆(≥32gb)自动启用zgc;openjdk 17+倾向shenandoah,oracle jdk或需lts支持则zgc更稳妥。

选型关键不在“最新”,而在“匹配”——堆大小、延迟敏感度、CPU资源、JDK版本这四个变量定下来,GC方案基本就明确了。
小内存单核或客户端场景(
Serial + Serial Old 是唯一合理选择。它单线程运行,无并发开销,内存占用极低(约几百KB),STW时间在百毫秒内可控。JDK8及以前的Client模式默认就是它。不需要调优参数,加 -XX:+UseSerialGC 即可启用。注意:JDK14起已移除Client VM,但Serial GC仍可用,适合嵌入式、IoT边缘设备或轻量级桌面工具。
高吞吐后台任务(批处理、ETL、离线计算)
Parallel Scavenge + Parallel Old 组合最稳。它不追求低延迟,而是最大化单位时间内的有效工作量。默认开启自适应调节(-XX:+UseAdaptiveSizePolicy),自动平衡Eden/Survivor比例和晋升阈值。推荐显式配置:-XX:+UseParallelGC -XX:MaxGCPauseMillis=200(仅作参考目标,实际以吞吐优先)。适合JDK8–JDK21全系,是多数服务器JDK8/11的默认组合。
低延迟Web服务(电商下单、支付接口、实时API)
CMS 在JDK9前是主力,但已废弃;G1 是当前主流答案。G1 用Region划分堆,支持 -XX:MaxGCPauseMillis=200(目标值,非硬性保证),能较好兼顾停顿与吞吐。需注意:堆不宜小于4GB,否则Region粒度过粗,效果打折扣;避免手动设置年轻代大小(如-XX:NewRatio),让G1自主调控。JDK9+默认启用G1,JDK21仍广泛使用。
超低延迟+大堆系统(风控决策、实时推荐、金融行情)
ZGC 或 Shenandoah 是唯二选项。ZGC(JDK11+)停顿稳定在10ms内,支持堆高达16TB,依赖着色指针,要求Linux/x64或Windows x64;Shenandoah(JDK12+)停顿同样亚十毫秒,压缩更激进,对CPU占用略高但兼容性稍广(支持ARM64)。二者都不支持JDK8,且均需开启大页(-XX:+UseLargePages)和禁用压缩指针(-XX:-UseCompressedOops,堆>32GB时自动启用)。选型看JDK底座:用OpenJDK17+倾向Shenandoah;用Oracle JDK或需长期LTS支持,ZGC更稳妥。











