导语
在之前的分享中,我们知道Java堆内存被分为新生代和老年代两个部分;其中,新生代中主要存储生命周期较短的对象,了解了新生代中的对象采用的是复制算法进行垃圾回收;而老年代主要存储生命周期较长的对象以及大对象,采用的是标记整理算法进行垃圾回收。
针对不同的分代对于新生代和老年代主要有如下的一些垃圾收集器,新生代的有Serial、ParNew、Parallel、Scavenge,老年代主要有SerialOld、Parallel Old、CMS,还有针对不同区域的G1分区收集算法等等。如图所示。
Serial收集器
Serial是基于复制算法实现的垃圾收集,属于一个单线程收集器。在JVM进行垃圾收集的过程中其他的线程必须等待也就是常说的 Stop-The-World。直到垃圾清理结束。
这个收集器采用的是复制算法,对于单CPU运行环境来说,没有线程交互的开销,可以获得最高的单线程垃圾回收效率,所以Serial垃圾收集器是Java虚拟机在使用Client模式下的新生代的默认垃圾收集器。
ParNew垃圾收集器
ParNew垃圾收集器是Serial 垃圾收集方式的多线程实现,也是采用复制