-XX:+UseSerialGC
新生代和老年代都使用串行收集器
串行收集器使用单线程并且是独占式的垃圾回收
-XX:+UseParNewGC
新生代使用ParNew垃圾回收器,老年代使用串行收集器
ParNew是串行收集器的多线程版本,只工作在新生代(可以见名知义,ParNew:Paralle New,并行新生代)。可以考虑在CPU并发能力强的系统中使用ParNew,单CPU的话,性能不一定比串行收集器好。
-XX:+UseParallelGC
新生代使用ParallelGC回收器,老年代使用串行收集器
ParallelGC是工作在新生代的并行垃圾收集器,使用复制算法。只是它更关注系统的吞吐量,所以和ParNewGC的一个区别是有相关参数可以设置GC的停顿时间。
-XX:+UseParallelOldGC
新生代使用ParallelGC,老年代使用ParallelOldGC
ParallelOldGC是ParallelGC的老年代版本,只工作在老年代,使用标记压缩的回收算法,JDK1.6版本及之后支持
-XX:+UseConcMarkSweepGC
新生代使用ParNew,老年代使用CMS
CMS垃圾收集器更关注系统停顿时间,采用标记清除算法并且使用多线程并行回收。
CMS在GC失败时,老年代会使用串行收集器
-XX:+UseG1GC
使用G1回收器,作用于新生代和老年代
工作在新生代的垃圾收集器:SerialGC、ParNewGC、ParallelGC
工作在老年代的垃圾收集器:CMS、SerialGC、ParallelOldGC
G1同时在新生代和老年代工作。
可以搭配使用的垃圾收集器配合为(前面新生代,后面老年代):
SerialGC+SerialGC
SerailGC+CMS
ParNewGC+SerialGC
ParNewGC+CMS
ParallelGC+ParallelOldGC
ParalleGC+SerialGC
G1