先来看一张图,串行代表两个垃圾回收器按顺序实验,并行代表同时实验。STW代表工作线程暂停,Stop The World的意思。
垃圾回收器实验顺序实验方式作用区域使用算法阐明Serial GC串行工作线程暂停,单线程举行垃圾回收新生代复制算法Serial Old GC串行工作线程暂停,单线程举行垃圾回收老年代标记-整理算法ParNew GC并行工作线程暂停,多线程举行垃圾回收新生代复制算法Serial GC的多线程版CMS GC并行用户线程和垃圾回收线程同时实验老年代标记-清除算法低暂停Parallel GC并行工作线程暂停,多线程举行垃圾回收新生代复制算法和ParNew相比能动态调整内存分配情况JDK8默认Parallel Old GC并行工作线程暂停,多线程举行垃圾回收老年代标记整理算法替代串行的Serial Old GCG1并行用户线程和垃圾回收线程同时实验整堆分区算法在耽误可控的情况下尽可能提高吞吐量JDK9默认ZGC并行用户线程和垃圾回收线程同时实验整堆分页算法STW的时间不超过1ms,且不会随着堆的大小增长而增长常用命令:
-XX:+PrintCommandLineFlags,检察使用的垃圾收集器
-XX:+UseSerialGC,指定使用Serial GC处理新生代,而且默认会使用Serial Old GC处理老年代
-XX:+UseParNewGC,指定新生代使用ParNew GC,-XX:+UseConcMarkSweepGC,指定老年代使用CMS GC
-XX:+UseParallelGC,指定新生代使用Parallel GC,-XX:+UserParallelOldGC,指定老年代使用Parallel Old GC,这两个配置一个,另一个自动激活
1. Serial GC、Serial Old GC
Serial GC和Serial Old GC是比较早的垃圾回收器,那个时间一样平常的服务器CPU还只有一核,所以一个线程举行垃圾回收就够了。串行的意思就是两个垃圾回收器不能同时实验。
2. Parallel GC、Parallel Old GC