天天看點

第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采用了一種中間方案,廢棄不建議的組合。