HotSpot虚拟机中的7种垃圾回收器

垃圾收集器概述

垃圾收集器组合

  • 图中展示了7种垃圾收集器,Serial、ParNew、Parallel Scavenge、CMS、Serial old、Parallel Old、G1
  • 带有连线的收集器代表可以组合使用
  • Serial Old作为CMS出现"Concurrent Mode Failure"失败的后备预案

并发垃圾收集和并行垃圾收集的区别

  • 并行指多条垃圾收集线程并行执行,但是用户线程需要等待,即进入stop the world状态,对应的垃圾收集器有ParNew、Parallel Old、Parallel Scavenge。
  • 并发指用户线程和垃圾收集线程同时执行,不一定是同时执行,可能是交替执行,对应的垃圾收集器有CMS、G1。

Minor GC和Full GC

Minor GC表示新生代垃圾收集,Full GC表示新生代和老年代垃圾收集,Major GC表示老年代垃圾收集。

Serial收集器

  1. 特点
  • 针对新生代、采用复制算法、单线程收集
  • 进行垃圾收集是会暂停所有的工作线程
    Serial/Serial Old组合收集器运行示意图如下:
  1. 应用场景
  • HotSpot在client模式下默认的新生代垃圾收集器
  • 对于限定单个CPU的环境来说,Serial收集器没有线程交互(切换)开销,可以获得最高的单线程收集效率
  1. 设置参数
  • “-XX:+UseSerialGC”:添加该参数来显式的使用串行垃圾收集器。

ParNew收集器

  1. 特点
  • 针对新生代、采用复制算法、多线程收集
  • 进行垃圾收集时会停止所有的用户线程
    ParNew/Serial Old组合收集器运行示意图如下:
  1. 应用场景
  • 在Server模式下,ParNew收集器是一个非常重要的新生代收集器,因为除Serial外,目前只有它能与CMS收集器配合工作。
  • 但在单个CPU环境中,不会比Serail收集器有更好的效果,因为存在线程交互开销。
  1. 设置参数
  • “-XX:+UseConcMarkSweepGC”:指定使用CMS后,会默认使用ParNew作为新生代收集器
  • “-XX:+UseParNewGC”:强制指定使用ParNew
  • “-XX:ParallelGCThreads”:指定垃圾收集的线程数量,ParNew默认开启的收集线程与CPU的数量相同
  1. 为什么只有ParNew能与CMS收集器配合?
  • CMS是HotSpot在JDK1.5推出的第一款真正意义上的并发(Concurrent)收集器,第一次实现了让垃圾收集线程与用户线程(基本上)同时工作;CMS作为老年代收集器,但却无法与JDK1.4已经存在的新生代收集器Parallel Scavenge配合工作;因为Parallel Scavenge(以及G1)都没有使用传统的GC收集器代码框架,而另外独立实现;而其余几种收集器则共用了部分的框架代码;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值