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也被引入,它们进一步提升了垃圾收集性能,尤其是针对超大堆和低延迟需求的应用场景。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!