小白日更第七十一天->经典垃圾收集器之ParNew收集器

上一篇文章中已经讲过了Serial收集器,没有看的小伙伴可以先去看一下,再来学习今天要说的垃圾收集器。

ParNew收集器实质上是Serial收集器的多线程并行版本, 除了同时使用多条线程进行垃圾收集之外, 其余的行为包括Serial收集器可用的所有控制参数(例如: -XX: SurvivorRatio、 -XX:PretenureSizeThreshold、 -XX: HandlePromotionFailure等) 、 收集算法、 Stop The World、 对象分配规则、 回收策略等都与Serial收集器完全一致, 在实现上这两种收集器也共用了相当多的代码。 ParNew收集器的工作过程如图3-8所示。
在这里插入图片描述
ParNew收集器除了支持多线程并行收集之外, 其他与Serial收集器相比并没有太多创新之处, 但它却是不少运行在服务端模式下的HotSpot虚拟机, 尤其是JDK 7之前的遗留系统中首选的新生代收集器, 其中有一个与功能、 性能无关但其实很重要的原因是: 除了Serial收集器外, 目前只有它能与CMS收集器配合工作。

在JDK 5发布时, HotSpot推出了一款在强交互应用中几乎可称为具有划时代意义的垃圾收集器——CMS收集器。 这款收集器是HotSpot虚拟机中第一款真正意义上支持并发的垃圾收集器, 它首次实现了让垃圾收集线程与用户线程(基本上) 同时工作

遗憾的是, CMS作为老年代的收集器, 却无法与JDK 1.4.0中已经存在的新生代收集器ParallelScavenge配合工作[1], 所以在JDK 5中使用CMS来收集老年代的时候, 新生代只能选择ParNew或者Serial收集器中的一个。 ParNew收集器是激活CMS后(使用-XX: +UseConcMarkSweepGC选项) 的默认新生代收集器, 也可以使用-XX: +/-UseParNewGC选项来强制指定或者禁用它。

可以说直到CMS的出现才巩固了ParNew的地位, 但成也萧何败也萧何, 随着垃圾收集器技术的不断改进, 更先进的G1收集器带着CMS继承者和替代者的光环登场。 G1是一个面向全堆的收集器, 不再需要其他新生代收集器的配合工作。 所以自JDK 9开始, ParNew加CMS收集器的组合就不再是官方推荐的服务端模式下的收集器解决方案了。 官方希望它能完全被G1所取代, 甚至还取消了ParNew加Serial Old以及Serial加CMS这两组收集器组合的支持(其实原本也很少人这样使用) , 并直接取消了-XX: +UseParNewGC参数, 这意味着ParNew和CMS从此只能互相搭配使用, 再也没有其他收集器能够和它们配合了。 读者也可以理解为从此以后, ParNew合并入CMS, 成为它专门处理新生代的组成部分。 ParNew可以说是HotSpot虚拟机中第一款退出历史舞台的垃圾收集器。

ParNew收集器在单核心处理器的环境中绝对不会有比Serial收集器更好的效果, 甚至由于存在线程交互的开销, 该收集器在通过超线程(Hyper-Threading) 技术实现的伪双核处理器环境中都不能百分之百保证超越Serial收集器。 当然, 随着可以被使用的处理器核心数量的增加, ParNew对于垃圾收集时系统资源的高效利用还是很有好处的。 它默认开启的收集线程数与处理器核心数量相同, 在处理器核心非常多(譬如32个, 现在CPU都是多核加超线程设计, 服务器达到或超过32个逻辑核心的情况非常普遍) 的环境中, 可以使用-XX: ParallelGCThreads参数来限制垃圾收集的线程数。

从ParNew收集器开始, 后面还将会接触到若干款涉及**“并发”和“并行”**概念的收集器。在大家可能产生疑惑之前, 有必要先解释清楚这两个名词。 并行和并发都是并发编程中的专业名词,在谈论垃圾收集器的上下文语境中, 它们可以理解为:
·并行(Parallel) : 并行描述的是多条垃圾收集器线程之间的关系, 说明同一时间有多条这样的线程在协同工作, 通常默认此时用户线程是处于等待状态。
·并发(Concurrent) : 并发描述的是垃圾收集器线程与用户线程之间的关系, 说明同一时间垃圾收集器线程与用户线程都在运行。 由于用户线程并未被冻结, 所以程序仍然能响应服务请求, 但由于垃圾收集器线程占用了一部分系统资源, 此时应用程序的处理的吞吐量将受到一定影响。
[1] 除了一个面向低延迟一个面向高吞吐量的目标不一致外, 技术上的原因是Parallel Scavenge收集器及
后面提到的G1收集器等都没有使用HotSpot中原本设计的垃圾收集器的分代框架, 而选择另外独立实现。

文章的内容也是<深入理解JAVA虚拟机>这本书中的内容,重点我已经加粗了,方便小伙伴们理解的时候抓住重点。

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值