JVM垃圾收集器
JVM垃圾收集器
JVM垃圾收集器分类

JVM(Java虚拟机)提供了多种垃圾收集器,这些收集器随着JDK版本的更新也在不断迭代和发展。以下是一些常见的JVM垃圾收集器及其特点:
-
Serial Collector (串行收集器)
新生代收集器,采用复制算法。单线程收集器,垃圾收集期间会暂停所有应用线程(Stop-The-World)。- 适用于客户端应用或单个CPU环境,对响应时间要求不是特别高且系统资源有限的场景。
-
ParNew Collector
新生代收集器,是Serial Collector的多线程版本。- 虽然提高了收集效率,但由于仍然是Stop-The-World类型,可能会增加总体的暂停时间。
- 主要与CMS收集器配合使用,在多核机器上有更好的表现。
-
Parallel Collector (Parallel Scavenge收集器)
新生代收集器,同样使用复制算法,并行执行垃圾收集,多线程。- 优化目标是达到高吞吐量(即总的工作负载/(工作负载+垃圾收集时间)),适合后台运算或批处理任务等强调高效率的应用。
-
Serial Old Collector
老年代收集器,基于标记-整理(Mark-Compact)算法。单线程收集,通常作为Client模式下的默认老年代收集器。- 当JVM与Parallel Scavenge收集器配合使用时,或者作为CMS收集器失败时的备用方案。
-
Parallel Old Collector
老年代收集器,是Parallel Scavenge收集器的老年代版本。- 使用
多线程并行执行标记-整理算法。 - 配合Parallel Scavenge使用时,可以构成一个关注高吞吐量的完整收集器策略。
-
Concurrent Mark Sweep (CMS) Collector
老年代收集器,基于标记-清除算法并尝试减少Stop-The-World的时间。- 并发收集设计,分为多个阶段,大部分阶段可以和应用线程并发执行。
- 主要目标是在低延迟应用中尽量减少垃圾收集带来的停顿时间。
-
Garbage-First (G1) Collector
全面的垃圾收集器,适用于大内存服务器环境,替代了CMS。- 把整个堆划分为多个大小相等的Region,并采用部分并发的
标记-整理算法。 - 目标是可预测的停顿时间和避免全堆扫描,尤其适用于多核硬件和大型堆配置。
-
Z Garbage Collector (ZGC)
- 自JDK 11开始引入,目标是将最大暂停时间限制在10毫秒以内,支持TB级堆内存,并采用了一系列先进算法和技术。
-
Shenandoah Garbage Collector
- 也是一个专注于减少停顿时间的收集器,从JDK 12开始作为实验特性引入,并在后续版本中逐渐稳定,使用并发的标记-压缩算法。

请注意,随着JDK版本的演进,一些早期的收集器可能已经过时或被替换。例如,在较新版本的JDK(比如JDK 11及以后)中,Z Garbage Collector(ZGC)和Shenandoah GC也被引入,它们进一步提升了垃圾收集性能,尤其是针对超大堆和低延迟需求的应用场景。

浙公网安备 33010602011771号