说一下 jvm 有哪些垃圾回收器?

发布于:2025-02-12 ⋅ 阅读:(44) ⋅ 点赞:(0)

JVM 垃圾回收器对比表

垃圾回收器 类型 工作方式 回收方式 停顿时间 适用场景 优点 缺点 常见问题 常见配置
Serial GC 串行 单线程,STW 年轻代:复制算法
老年代:标记-整理
小内存、单核CPU,如桌面应用或嵌入式设备 简单高效,适用于单核和小内存环境 STW 时间长,不适用于多线程、高并发环境 长时间停顿影响用户体验 -XX:+UseSerialGC
Parallel GC 并行 多线程,STW 年轻代:复制算法
老年代:标记-整理
中等 高吞吐量场景,如批量计算、大数据处理 适用于多核 CPU,吞吐量高,自动调优 STW 时间不可预测,容易造成短时性能抖动 长时间 Full GC 导致系统暂停 -XX:+UseParallelGC(年轻代并行)
-XX:+UseParallelOldGC(老年代并行)
CMS GC 并发 多线程,部分 STW 标记-清除,并发标记、并发清除 短(部分长停顿) 低延迟场景,如在线系统、Web 服务器 低停顿时间,可并发清理,适用于交互式应用 易产生碎片,导致 Full GC,容易造成“浮动垃圾”问题 碎片化严重,需要频繁 Full GC -XX:+UseConcMarkSweepGC
G1 GC 并发并行 逻辑分区回收,Region 机制 标记-整理 + 复制,Mixed GC 结合年轻代和老年代 可调 大内存、低停顿场景,如大型 Web 服务器 停顿可预测,回收均衡,减少碎片 配置复杂,Full GC 开销大,调优较难 Full GC 触发后暂停时间较长 -XX:+UseG1GC
ZGC 并发并行 读屏障、并发回收 并发标记-复制 极短(<1ms) 超大内存、低延迟,如云计算、金融交易系统 STW 低于 1ms,可扩展至 16TB 内存 内存占用大,支持的 JDK 版本有限,调优难度大 内存占用过大时可能影响吞吐量 -XX:+UseZGC
-XX:ZUncommitDelay=300(内存回收优化)
Shenandoah GC 并发并行 并发标记、并发清理 标记-清除 + 复制 极短 超大内存、低延迟,如电商、游戏服务器 低延迟(<10ms),并发回收,适用于交互式应用 小内存环境下表现不如 CMS/G1,CPU 占用较高 高 CPU 使用率,影响吞吐量 -XX:+UseShenandoahGC

补充说明

  1. STW(Stop The World):指垃圾回收期间所有应用线程必须暂停,影响系统响应时间。
  2. 吞吐量(Throughput):衡量 GC 回收效率,吞吐量高的 GC 适用于计算密集型任务,但可能会有较长的 STW 停顿。
  3. 低延迟(Low Latency):适用于需要极短暂停时间的应用,如金融、云计算、实时系统。
  4. G1/ZGC/Shenandoah 适用于大内存环境,尤其是 ZGC 可支持 16TB 内存,G1 可平衡吞吐与停顿。
  • 停顿时间:指的是垃圾回收暂停应用程序的时间。较长意味着回收期间会发生较长时间的“Stop The World”事件。
  • 适用场景:指各个回收器的典型应用环境,如服务器应用、多核CPU或客户端应用等。
  • 优点:列出了每个回收器在特定场景下的优势。
  • 缺点:列出了每个回收器可能面临的挑战或局限。

这个表格简要地比较了常见的垃圾回收器,帮助你选择合适的垃圾回收器时参考。