JVM之垃圾回收器:7种经典垃圾回收器总结

本文总结了JDK1.8中的7种垃圾收集器,包括Serial、ParNew、Parallel、CMS、G1等,探讨了它们的特点和发展阶段。还介绍了不同收集器的组合使用情况,如Serial Old作为CMS的备用方案,以及JDK9中对某些组合的支持取消。在选择垃圾回收器时,文章提供了基于不同场景的建议,强调没有最佳收集器,调优需结合具体需求。


往期

7种经典垃圾回收器总结

截止JDK1.8,一共有7款不同的垃圾收集器,每一款不同的垃圾收集器都有不同的特点

垃圾收集器分类作用位置使用算法特点适用场景
Serial串行运行新生代复制算法响应速度优先适用于单CPU环境下的client模式
ParNew并行运行新生代复制算法响应速度优先多CPU环境Server模式下与CMS配合使用
Parallel并行运行新生代复制算法吞吐量优先适用于后台运算而不需要太多交互的场景
Serial Old串行运行老年代标记-压缩算法响应速度优先适用于单CPU环境下的client模式
或作为CMS出现"Concurrent Mode Failure"失败的后备预案
Parallel Old并行运行老年代标记-压缩算法吞吐量优先适用于后台运算而不需要太多交互的场景
CMS并发运行老年代标记-清除算法响应速度优先适用于互联网或B/S业务
G1并发、并行新生代、老年代复制算法、
标记-压缩算法
响应速度优先面向服务端应用

GC发展阶段:

  • Serial => Parallel (并行) => CMS(并发) => G1 => ZGC

垃圾回收器组合

在这里插入图片描述

  • 两个收集器间有连线,表明它们可以搭配使用:
    • Serial + Serial Old
    • ParNew + Serial Old
    • Serial + CMS
    • ParNew + CMS
    • Parallel Scavenge + Serial Old
    • Parallel Scavenge + Parallel Old
    • G1
  • Serial Old 作为CMS出现"Current Mode Failure"失败的后备预案
  • 红色虚线
    • 由于维护和兼容性测试的成本,在JDK8时将Serial + CMS、ParNew + Serial Old这两个组合声明为Deprecated,并在JDK9中完全取消了这些组合的支持,即:移除
  • 绿色虚线
    • JDK14中:弃用Parallel Scavenge + Serial Old组合
  • JDK14中,删除CMS垃圾回收器

怎么选择垃圾回收器?

  • Java垃圾收集器的配置对于JVM优化来说是一个很重要的选择,选择合适的垃圾收集器可以让JVM的性能有一个很大的提升。

  • 怎么选择垃圾收集器

    • 1.优先调整堆的大小让JVM自适应完成

    • 2.如果内存小于100M,使用串行收集器

    • 3.如果是单核、单机程序,并且没有停顿时间的要求,串行收集器

    • 4.如果是多CPU、需要高吞吐量、允许停顿时间超过1秒,选择并行或者JVM自己选择

    • 5.如果是多CPU、追求低停顿时间,需快速响应(比如延迟不能超过1秒,如互联网应用),使用并发收集器

      • 官方推荐G1,性能高。现在互联网的项目,基本都是使用G1
  • 没有最好的收集器,更没有万能的收集器;调优永远是针对特定场景、特定需求,不存在一劳永逸的收集器

Reference

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xylitolz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值