经典垃圾收集器之ParNew
一、ParNew收集器介绍
如果说Serial GC是年轻代中的单线程垃圾收集器,那么ParNew收集器则是Serial收集器的多线程版本。Par是Parallel的缩写,New:只能处理的是新生代。ParNew收集器除了采用并行回收的方式回收内存外,两款垃圾收集器之间几乎没有任何区别,ParNew收集器在年轻代中同样使用复制算法、"Stop-the-World"机制。ParNew是很多JVM运行在Server模式下新生代的默认垃圾收集器。
1.对于新生代,回收次数频繁,使用并行的方式高效。
2.对于老年代,回收次数少,使用串行方式节省资源(CPU并行需要切换线程,串行可以节省切换线程的资源)。
由于ParNew收集器是基于并行回收,那么是否可以断定ParNew收集器的回收效率在任何场景下都比Serial收集器更好呢?
1.ParNew收集器运行在多CPU的环境下,由于可以充分利用多CPU、多核心等物理硬件资源优势,可以更快地完成垃圾收集,提升程序地吞吐量。
2.但是在单个CPU环境下,ParNew收集器不比Serial收集器更高效,虽然Serial收集器是基于串行回收地,但是由于CPU不需要频繁地任务切换,因此可以有效避免县城交互过程中产生地一些额外开销。目前除了Serial外,只有ParNew GC能与CMS收集器配合工作。
二、ParNew收集器参数设置
在程序中,开发人员可以通过选项-XX:+UseParNewGC手动指定使用ParNew收集器执行内存回收任务,它表示年轻代使用并行收集器,不影响老年代。-XX:ParallelGCThreads限制线程数量,默认开启和CPU数据相同地线程数。