天天看点

第9次面试:某方国信(2022-03-20)ParNew收集器

  某方国信是一家外包公司,面试过程蛮顺利的,但是被问到ParNew收集器时,我回答不出来,所以面试又挂了。垃圾收集器很多,这是我的弱项,我一个都没看过,所以抽时间我会去整理学习这一块内容。

ParNew收集器

  首先要记住总共有几种垃圾收集器。算到JDK9的话,答案是7种(两种G1合并为一种)。我整理出一个表格:

分代 收集器 激活参数
Young Copy -XX:+UseSerialGC
PS Scavenge -XX:+UseParallelGC
ParNew -XX:+UseParNewGC
G1 Young Generation -XX:+UseG1GC
Old MarkSweepCompact -XX:+UseSerialGC
PS MarkSweep -XX:+UseParallelOldGC
ConcurrentMarkSweep -XX:+UseConcMarkSweepGC
G1 Mixed Generation -XX:+UseG1GC

  从表中可以看出ParNew是新生代收集器,全称为Parallel New收集器,实际上是Copy收集器(也叫Serial收集器)的并行版,可以利用多核CPU的多个核进行并行收集。其算法和Copy收集器一样在安全点,暂停所有用户线程,采用标记-复制算法。

  ParNew最好和和老年代的CMS配合使用。在JDK8中ParNew和MarkSweepCompact配合的方式已经被废弃,而JDK9已经不允许这样配合了。等于是说JDK7中新生代Serial、ParNew和老年代的CMS、MarkSweepCompact可以任意组合。JDK9呢,Serial只能配合MarkSweepCompact(启动都是-XX:+UseSerialGC),ParNew只能配合CMS收集器。但是JDK8采用了一种中间方案,废弃不建议的组合。