JVM 垃圾收集器及其优化

垃圾收集器及GC优化参数

Young GenerationSerial    ParNew   ParallelScavenge

Tenured GenerationCMS     Parallel Old    Serial Old(MSC)

other  G1

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     新生代中EdenSurvivor的比值

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有效

猜你喜欢

转载自blog.csdn.net/my_dearest_/article/details/79847003
今日推荐