一张图+一句话,记住所有 JVM 垃圾收集器!

最近找工作,之前加班火气大,加上吃错药,休息了几个月!总结别随意吃寒凉药,本来就虚,工作随之 GG。休息了段时间,老问这个 JVM。所以今天我们来聊聊 JVM(Java 虚拟机)的垃圾收集器(Garbage Collector,简称 GC)。
很多人一听到“垃圾回收”就头疼,觉得又是 CMS、又是 G1、又是 ZGC……名字多、参数杂、原理难。
别担心!今天我用 极简 + 类比 + 口诀 的方式,帮你轻松记住主流垃圾收集器的核心特点!


🧠 一句话理解垃圾回收

GC 就是 JVM 的“保洁阿姨”——她负责打扫堆内存里的“垃圾对象”,好腾出空间给新对象住。


🗺️ 垃圾收集器全图速览(截至 JDK 17)

分代新生代收集器老年代收集器
经典组合Serial、ParNew、Parallel ScavengeSerial Old、Parallel Old、CMS
统一收集器G1、ZGC、Shenandoah

注意:JDK 8 及以前常用“分代收集”,JDK 9+ 推荐用 G1,JDK 11+ 开始支持 ZGC/Shenandoah。


🧩 四大“保洁阿姨”风格(容易记!)

1. Serial(串行阿姨) → “一个人干活,安静高效”

  • 特点:单线程,停顿全场(Stop-The-World)
  • 适用:小型应用、客户端程序、内存小(<100MB)
  • 口诀“单干小能手,省电又省心”

2. Parallel(并行阿姨) → “全家总动员,干得快但吵”

  • 新生代叫 Parallel Scavenge,老年代叫 Parallel Old
  • 特点:多线程并行,吞吐量高(适合后台计算)
  • 目标:最大化 CPU 利用率,适合“跑批任务”
  • 口诀“人多力量大,吞吐顶呱呱”

3. CMS(并发阿姨) → “边干活边打扫,怕吵用户”

  • 全名:Concurrent Mark Sweep(并发标记清除)
  • 特点:尽量和用户线程并发运行,低延迟
  • 缺点:占用 CPU、会产生内存碎片、JDK 14 被移除!
  • 口诀“并发打扫快,碎片它不睬”

⚠️ 记住:CMS 是“尽力而为”,但可能失败(会退化成 Serial Old)!


4. G1(分区阿姨) → “划区管理,又快又稳”

  • G1 = Garbage First
  • 特点
    • 把堆分成 多个小区域(Region)
    • 优先回收垃圾最多的区域(“垃圾优先”)
    • 可预测停顿时间(比如“最大停顿200ms”)
  • 适用:大堆(4GB~几十GB)、需要低延迟 + 高吞吐平衡
  • 口诀“分区垃圾先,停顿可预言”

JDK 9 起默认 GC!


5. ZGC / Shenandoah(超新星阿姨) → “几乎不停顿!”

  • 目标停顿时间 < 10ms,即使堆有 TB 级!
  • 原理:并发压缩 + 指针着色(ZGC) / 并发复制(Shenandoah)
  • 适用:超大堆、实时系统(如金融交易、游戏服务器)
  • 口诀“ZGC 闪电侠,停顿看不见!”

📌 ZGC 从 JDK 11 开始实验,JDK 15 转正;Shenandoah 需 OpenJDK(Oracle JDK 不包含)。


🧠 终极记忆口诀(背这一段就够了!)

“小用 Serial,吞用 Parallel,
低延选 CMS(已淘汰),
平衡用 G1,
超快上 ZGC!”


🔚 总结:如何选 GC?

场景推荐 GC
小程序、测试Serial
后台计算、吞吐优先Parallel
老项目(JDK 8)CMS(但建议迁移到 G1)
通用生产环境(JDK 8~17)G1
超大堆 + 超低延迟(JDK 11+)ZGC / Shenandoah

希望这篇博客让你 轻松记住 JVM 垃圾收集器
下次面试被问到 GC,你可以笑着说:“哦,就是那几位保洁阿姨嘛~”

💡 小贴士:实际调优时,先用默认 GC(G1),再根据监控(如 GC 日志、Prometheus)调整,不要过早优化


作者:一个爱用比喻记技术的程序员
发布时间:2025年
标签:#JVM #GC #Java #性能调优 #程序员入门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值