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也被引入,它们进一步提升了垃圾收集性能,尤其是针对超大堆和低延迟需求的应用场景。
原文链接 https://www.hanyuanhun.cn | https://node.hanyuanhun.cn