ParNew收集器

        ParNew收集器其实就是Serial收集器的多线程版本,除了使用多线程进行垃圾收集之外,其与行为包括Serial收集器都可用的所有控制参数(例如 :-XX:SurvivorRatio、-XX:PretenureSizeThreshold\ -XX:HandlePromotionFailure 等)、手机算法、Stop The World、对象分配规则、回售策略等都与Serial收集器完全一样,在现实上,这两种收集器也共用了相当多的代码。ParNew收集器的工作过程如下图:

 

        ParNew收集器除了多线程收集之外,其他与Serial收集器相比并没有太多创新之处,但它却是许多运行在Server,模式下的虚拟机中首选的新生代收集器,其中有一个与性能无关但很重要的原因是,除了Serial 收集器外,目前只有它能与CMS收集器配合工作。在JDK1.5时期,Hso推出了一教在强交互应用中儿  可认为有划时代意义的垃圾收集器--CMS收集器(Concurent Mark Sweep,本节稍后将详细介绍这款收集器),这款收集器是HoSpot 虚拟机中第教真正意义上的并发Comcuren)收集器,它第一次实现了让垃圾收集线程与用户线程(基本上)同时工作,用前面那个例子的话来说,就是做到了在你的妈打扫房间的时候你还能一边往地上扔纸屑。
        不幸的是,CMS作为老年代的收集器,却无法与JDK 1.4.0 中已经存在的新生代收集器Paralel Scavenge配合工作,所以在JDK 1.5中使用CMS来收集老年代的时候,新生代只能选择ParNew或者Serial收集器中的一一个。 ParNew收集器也是使用-XX:+UseConcMarkSwcepGC选项后的默认新生代收集器,也可以使用-XX:+UseParNewGC选项来强制指定它。
ParNew收集器在单CPU的环境中绝对不会有比Serial收集器更好的效果,甚至由于存在线程交互的开销,该收集器在通过超线程技术实现的两个CPU的环境中都不能百分之百地保证可以超越Serial收集器。当然,随着可以使用的CPU的数量的增加,它对于GC时系统资源的有效利用还是很有好处的。它默认开启的收集线程数与CPU的数量相同,在CPU非常多(譬如32个,现在CPU动辄就4核加超线程,服务器超过32个逻辑CPU的情况越来越多了)的环境下,可以使用XX:ParllGCThreads参数来限制垃圾收集的线程数。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------ 

注意从PanNew 收集器开始,后面还会接触到几款并发和并行的收集器。在大家可能产生疑感之前,有必要先解释两个名词:并发和并行。这两个名词都是并发编程中的概念,在谈论垃圾收集器的上下文语境中,它们可以解释如下。
:并行(anlas指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。.并发Cocurn):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交禁执行)用户程序在继续运行,而垃级收集程序达行于另一个CU上。

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值