Java-GC垃圾收集器
1. Serial
young generation
“单线程”收集器,是指进行垃圾收集时,必须暂停其他所有工作线程,直到收集结束。是历史最悠久的收集器。
2. Serial Old
tenured generation
Serial收集器的老年代版本,用途:可与Parallel Scavenge搭配使用;作为CMS收集器的后备预案。
3. ParNew
young generation
是Serial收集器的多线程版本。青年代收集时不需要stop the world。
调优参数:
-XX:SurvivorRatio
-XX:PretenureSizeThreshold
-XX:HandlePromotionFailure
4. Parallel Scavenge
young generation
GC自适应调优算法,注重吞吐量
调优参数:
-XX:GCTimeRatio 垃圾收集时间站总时间的比率,吞吐量的倒数
-XX:MaxGCPauseMillis 最大垃圾收集停顿时间
5. Parallel Old
tenured generation
Parallel Scavenge收集器的老年代版本,使用多线程的标记整理算法。
在注重吞吐量以及CPU资源敏感的场合,都可使用Parallel Scavenge与Parallel Old组合
6. CMS
tenured generation
一种以获得最短回收停顿时间为目标的收集器。
-XX:+UseConcMarkSweepGC 打开CMS
7. G1
垃圾收集器常用参数:
参数 | 描述 |
UseSerailGC | |
UseParNewGC | |
UseConcMarkSweepGC | |
UseParallelGC | |
SurvivorRatio | 新生代中Eden区与Survivor区的容量比例,默认为8,Eden:Survivor=8:1 |
PretenureSizeThreshold | 晋升至老年代对象大小,大于则在老年代分配 |
MaxTenuringThreshold | 晋升至老年的年龄,经过一次Minor GC则加1,大于则进老年代 |
UseAdaptiveSizePolicy | 动态调整个区域大小及进入老年代年龄 |
HandlePromotionFailure | |
ParallelGCThreads | 并行GC内存回收线程数 |
GCTimeRatio | GC时间占总时间比率,默认99,即允许1%的GC时间。仅在Parallel Scavenge收集器生效 |
MaxGCPauseMillis | GC最大停顿时间。仅在Parallel Scavenge收集器生效 |
CMSInitiatingOccupancyFraction | CMS在年老代被使用多少后触发GC。默认68%,仅CMS |
UseCMSCompactAtFullCollection | CMS收集后是否进行内存碎片整理,仅CMS |
CMSFullGCsBeforeCompaction | CMS进行若干次收集后才进行内存碎片整理 |