JVM之GC常见的垃圾回收器

收集器 适用区域 特点 适用场景
Serial 新生代 单线程,STW(Stop-The-World) 客户端小应用
Parallel Scavenge 新生代 多线程,吞吐量优先 后台计算任务
ParNew 新生代 Serial 的多线程版 配合 CMS 使用
CMS 老年代 并发标记,低延迟 响应优先的系统
G1 全堆 分区域回收,平衡吞吐/延迟 JDK9+ 默认
ZGC 全堆 超低延迟(<10ms) 超大堆应用

1. Serial 收集器

  • 特点:单线程、STW(Stop-The-World)

  • 区域:新生代(复制算法)

  • 适用场景 :客户端模式(如-client)、单核CPU

  • 参数-XX:+UseSerialGC

总结:简单高效,但停顿时间长。


2. ParNew 收集器

  • 特点:Serial 的多线程版本

  • 区域:新生代(复制算法)

  • 适用场景:配合CMS使用(JDK8及之前)

  • 参数-XX:+UseParNewGC

总结:多线程提升GC效率,但仍有STW。


3. Parallel Scavenge(吞吐量优先)

  • 特点 :多线程、关注吞吐量(吞吐量 = 用户代码时间 / (用户代码时间 + GC时间)

  • 区域:新生代(复制算法)

  • 适用场景:后台计算型任务(如批量处理)

  • 参数-XX:+UseParallelGC

总结:适合不关心延迟,追求高吞吐的场景。


4. Serial Old 收集器

  • 特点:Serial 的老年代版本

  • 区域:老年代(标记-整理算法)

  • 适用场景:与Parallel Scavenge搭配或作为CMS后备

  • 参数-XX:+UseSerialOldGC(JDK9已移除)


5. Parallel Old 收集器

  • 特点:Parallel Scavenge 的老年代版本

  • 区域:老年代(标记-整理算法)

  • 适用场景:与Parallel Scavenge组合,吞吐量优先

  • 参数-XX:+UseParallelOldGC

总结:JDK8默认组合(Parallel Scavenge + Parallel Old)。


6. CMS(Concurrent Mark-Sweep)

  • 特点:并发标记清除、低延迟

  • 区域:老年代(标记-清除算法)

  • 流程

    1. 初始标记(STW)

    2. 并发标记

    3. 重新标记(STW)

    4. 并发清除

  • 缺点:内存碎片、并发模式失败(Concurrent Mode Failure)

  • 参数-XX:+UseConcMarkSweepGC(JDK14已移除)

总结:减少停顿时间,但内存碎片和CPU敏感。


7. G1(Garbage-First)

  • 特点:分区域(Region)收集、可预测停顿模型

  • 区域:全堆(标记-整理算法)

  • 流程

    1. 初始标记(STW)

    2. 并发标记

    3. 最终标记(STW)

    4. 筛选回收(STW)

  • 优势:平衡吞吐和延迟,适合大堆(JDK9+默认)

  • 参数-XX:+UseG1GC

总结:现代JVM首选,适合6GB以上堆内存。


8. ZGC(低延迟)

  • 特点:并发回收、停顿时间<10ms

  • 区域:全堆(染色指针+读屏障)

  • 适用场景:超大堆(TB级)、对延迟敏感

  • 参数-XX:+UseZGC(JDK15+生产可用)

总结:未来趋势,但需要较新JDK版本。


9. Shenandoah

  • 特点:类似ZGC,但开源实现

  • 优势:低停顿(与ZGC竞争)

  • 参数-XX:+UseShenandoahGC


对比总结

收集器 目标 算法 适用场景
Serial/Serial Old 简单 复制/标记-整理 单核、客户端
Parallel Scavenge 高吞吐 复制/标记-整理 后台计算
CMS 低延迟 标记-清除 老年代(JDK8及之前)
G1 平衡 标记-整理 JDK9+默认,大堆
ZGC/Shenandoah 超低延迟 染色指针 超大堆、敏感应用
相关推荐
小O的算法实验室10 分钟前
2026年IEEE TETCI,山区环境下基于双种群进化的协同无人机巡逻任务协同优化,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
生成论实验室30 分钟前
《事件关系阴阳博弈动力学:识势应势之道》第二篇:阴阳博弈——认知的动力学基础
数据结构·人工智能·科技·神经网络·算法
风筝在晴天搁浅1 小时前
字节高频题 小于n的最大数
算法
LabVIEW开发1 小时前
LabVIEW水力机组空蚀在线监测
算法·labview·labview知识·labview功能·labview程序
身如柳絮随风扬1 小时前
多数据源切换实战:从业务场景到3种实现方案全解析
java·分布式·微服务
AI科技星1 小时前
科幻艺术书本封面:《全域数学》第一部·数术本源 第三卷 代数原本(P95-141)完整五级目录【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
风筝在晴天搁浅1 小时前
LeetCode 92.反转链表Ⅱ
算法·leetcode·链表
王老师青少年编程1 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【贪心与二分判定】:数列分段 Section II
c++·算法·贪心·csp·信奥赛·二分判定·数列分段 section ii
Java小生不才2 小时前
Spring AI文生音
java·人工智能·spring
凯尔萨厮2 小时前
Springboot2.x+Thymeleaf项目创建
java