垃圾收集器及GC优化参数
Young Generation:Serial ParNew ParallelScavenge
Tenured Generation:CMS Parallel Old Serial Old(MSC)
Serial:
特点:新生代单线程 STW 可配合CMS 复制算法
适用于CPU数量较少的Client模式
ParNew:
特点:新生代多线程 STW 可配合CMS 复制算法
适用于多CPU数量的Server模式,在四核以下的表现反而可能不如Serial收集器
Parallel Scavenge:
特点:自适应调节策略吞吐量控制 STW 新生代多线程复制算法
*吞吐量为运行用户代码时间所占总时长的比例 总时长 = 用户代码时间+GC消耗时间
适用于后台运算所占比例较高的环境
Serial Old:
特点:老年代单线程标记-整理算法 CMS后备收集器
适用于CPU数量较少的Client模式
Parallel Old:
特点:多线程标记-整理算法吞吐量控制
适用于CPU资源分配紧张及吞吐量需要控制的环境
CMS:
特点:响应速度快标记-清除算法多线程并发工作
*由于是与用户线程并发进行垃圾回收的工作,所以不能回收收集时产生的老年代数据,而且不能在老年代满载时进行回收,需要提前回收从而给用户线程预留一定的空间
*若老年代分配的内存不足或设置的阈值过低,则可能会频繁触及收集阈值而导致性能下降
*若用户线程所需空间不足,将导致ConcurrentMode Failure,从而切换至后备收集器Serial Old
适用于多CPU,内存也足够大的环境
G1:
特点:并发+并行工作可预测收集时间模型保留分代概念高效
适用于多CPU环境
选择垃圾收集器:
UseSerialGC 使用Serial+Serial Old / Client模式默认
UseParNewGC 使用ParNew+SerialOld
UseConcMarkSweepGC 使用ParNew+CMS+Serial Old(作CMS后备)
UseParallelGC 使用Parallel Scavenge + Serial Old(PS MarkSweep)
UseParallelOldGC 使用Parallel Scavenge + Parallel Old
不稳定的优化参数:
SurvivorRatio 新生代中Eden与Survivor的比值
PretenureSizeThreshold 所占空间大于此参数的对象直接进入老年代
MaxTenuringThreshold 设置晋升老年代的年龄限制 / 每一次在新生代中的Minor GC 年龄+1
UseAdaptiveSizePolicy 采用自动调整策略 / Parallel Scavenge有效
HandlePromotionFailure 是否允许担保分配失败
ParallelGCThreads 设置ParallelGC的线程数
GCTimeRatio GC占总时间的比例 / Parallel Scavenge有效 默认99
MaxGCPauseMillis GC最大停顿时间 / Parallel Scavenge有效
CMSInitiatingOccupancyFraction 老年代进行收集的阈值 / CMS有效
UseCMSCompactAtFullCollection 完成垃圾收集后是否进行一次碎片整理/ CMS有效
CMSFullGCsBeforeCompaction 完成若干次垃圾收集后进行一次碎片整理/ CMS有效