Java虚拟机(JVM)提供了多种垃圾收集器(Garbage Collector, GC),每种收集器都有其独特的设计目标和权衡考量,以满足不同应用场景的需求。
1.Java垃圾收集器
Serial GC (串行收集器)
特点: 最简单、历史最悠久的收集器。它使用单个线程执行所有GC工作,并在GC期间暂停所有应用线程(Stop-The-World, STW)。
适用场景: 适用于客户端模式下的小型应用、嵌入式系统或单核CPU机器,这些场景内存有限(通常堆大小小于100MB),协调多线程的开销不划算。
启用参数: -XX:+UseSerialGC
Parallel GC (并行收集器)
特点: 也称吞吐量收集器(Throughput Collector)。它使用多个线程并行执行大部分的GC工作,旨在最大限度地提高应用吞吐量。但它同样会导致应用线程长时间停顿(STW)。
适用场景: 适用于可以容忍较长停顿的批处理系统、数据挖掘等后台服务,这些场景更关注完成总任务的时间,而非单次响应延迟。
默认状态: 是 JDK 5 到 JDK 8 版本的默认垃圾收集器。
启用参数: -XX:+UseParallelGC
CMS GC (Concurrent Mark Sweep 并发标记清除收集器)
特点: 追求低延迟,是第一个尝试与应用线程并发执行大部分标记工作的收集器。它在 GC 过程中只有短暂的 STW 停顿。但是,它不进行内存整理/压缩,容易产生内存碎片。
适用场景: 适用于响应时间敏感的网络服务、Web应用等场景。
状态: 在JDK 9中已被标记为废弃(Deprecated),推荐使用G1或ZGC替代。
启用参数: -XX:+UseConcMarkSweepGC
G1 GC (Garbage-First 垃圾优先收集器)
特点: G1 是 JDK 9及更高版本的默认垃圾收集器。它将堆内存划分为多个大小相等的区域(Region),并根据这些区域的垃圾数量(垃圾最多优先)来智能选择回收区域。它在实现可预测的停顿时间的同时,还能进行整理(压缩),避免内存碎片。
适用场景: 通用型收集器,适用于堆内存较大(通常建议大于 4GB)且需要平衡吞吐量和延迟的场景。
默认状态: JDK 9+ 的默认收集器。
启用参数: -XX:+UseG1GC
ZGC (Z Garbage Collector) / Shenandoah GC
特点: 这两个是现代超低延迟收集器,目标是实现亚毫秒级(<1ms)的停顿时间。它们都能在大容量堆内存(TB级别)上实现几乎恒定的停顿时间,与堆大小无关。它们通过大量的并发工作和有色指针技术实现。
适用场景: 适用于对延迟极其敏感的应用,如实时交易系统、大型内存数据库、需要超低停顿的游戏服务等。
启用参数: -XX:+UseZGC 或 -XX:+UseShenandoahGC (Shenandoah 需要特定 OpenJDK 发行版,如 Red Hat/Adoptium)。
常见的Java垃圾收集器主要包括以下几种,它们的发展历程是从追求高吞吐量逐渐演变为追求低延迟:
2.java各版本及GC收集器份额
java各版本与其收集器
Java versions and their Garbage Collectors
| Version | Default GC | Available GCs |
|---|---|---|
| 6u14 | Serial /Parallel (MP) | Serial, Parallel, CMS, G1 (E) |
| 7u4–8 | Serial /Parallel (MP) | Serial, Parallel, CMS, G1 |
| 9–10 | G1 | Serial, Parallel, CMS, G1 |
| 11 | G1 | Serial, Parallel, CMS, G1, Epsilon (E), ZGC (E) |
| 12–13 | G1 | Serial, Parallel, CMS, G1, Epsilon (E), ZGC (E), Shenandoah (E) |
| 14 | G1 | Serial, Parallel, G1, Epsilon (E), ZGC (E), Shenandoah (E) |
| 15–20 | G1 | Serial, Parallel, G1, Epsilon (E), ZGC, Shenandoah |
| 21–22 | G1 | Serial, Parallel, G1, Epsilon (E), ZGC, Shenandoah, GenZGC (E) |
| 23 | G1 | Serial, Parallel, G1, Epsilon (E), ZGC, Shenandoah, GenZGC (default ZGC) |
| 24 | G1 | Serial, Parallel, G1, Epsilon (E), Shenandoah, GenZGC, GenShen (E) |
| 25 | G1 | Serial, Parallel, G1, Epsilon (E), Shenandoah, GenZGC, GenShen |
| (E) = experimental |
份额对比
来源:2024 State of the Java Ecosystem
java长期支持版本采用情况(2024年)

java8使用份额在逐年减少。
java生产版本采用情况(2025年)
在Azul-report-State-of-Java-2025报吿中的份额如下
java21(LTS) 的份额在逐年增加。
LTS版本java的GC收集器采用情况

java7/java8版本,CMS、G1与Parallel份额差不多,都在20%左右。
java11以后,默认都是使用G1算法,但Serial也有其使用场景。
3.参考资料
2024 State of the Java Ecosystem
Azul-report-State-of-Java-2025
HotSpot Virtual Machine Garbage Collection Tuning Guide
杨晓峰 - Java常见的垃圾收集器有哪些?
– end –