某方国信是一家外包公司,面试过程蛮顺利的,但是被问到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最好和和老年代的CMS配合使用。在JDK8中ParNew和MarkSweepCompact配合的方式已经被废弃,而JDK9已经不允许这样配合了。等于是说JDK7中新生代Serial、ParNew和老年代的CMS、MarkSweepCompact可以任意组合。JDK9呢,Serial只能配合MarkSweepCompact(启动都是-XX:+UseSerialGC),ParNew只能配合CMS收集器。但是JDK8采用了一种中间方案,废弃不建议的组合。