7种经典垃圾回收器总结

垃圾回收器总结

1. 7种经典垃圾回收器总结

截止 JDK1.8,一共有 7 款不同的垃圾收集器。每一款的垃圾收集器都有不同的特点,在具体使用的时候,需要根据具体的情况选用不同的垃圾收集器。

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

GC 发展阶段:Serial => Parallel(并行)=> CMS(并发)=> G1 => ZGC

2. 垃圾回收器组合

不同厂商、不同版本的虚拟机实现差距比较大。HotSpot 虚拟机在 JDK7/8 后所有收集器及组合如下图

image-20200714080151020

  1. 两个收集器间有连线,表明它们可以搭配使用:Serial/Serial Old、Serial/CMS、ParNew/Serial Old、ParNew/CMS、Parallel Scavenge/Serial Old、Parallel Scavenge/Parallel Old、G1;

  2. 其中 Serial Old 作为 CMS 出现"Concurrent Mode Failure"失败的后备预案。

  3. (红色虚线)由于维护和兼容性测试的成本,在 JDK 8 时将 Serial + CMS、ParNew + Serial old 这两个组合声明为 Deprecated(JEP 173),并在 JDK 9 中

完全取消了这些组合的支持(JEP214),即:移除。

  1. (绿色虚线)JDK 14 中:弃用 ParallelScavenge 和 SeriaOold GC 组合(JEP 366)

  2. (绿色虚框)JDK 14 中:删除 CMS 垃圾回收器(JEP 363)

3. 怎么选择垃圾回收器

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

怎么选择垃圾收集器?

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

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

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

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

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

    官方推荐 G1,性能高。现在互联网的项目,基本都是使用 G1

最后需要明确一个观点:

  1. 没有最好的收集器,更没有万能的收集
  2. 调优永远是针对特定场景、特定需求,不存在一劳永逸的收集器
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值