gc参数与算法

-XX:SurvivorRatio 设置eden区大小和survivor区大小的比例
-XX:NewRatio 新生代和老年代的比

引用计数:Java未使用
复制:新生代使用
标记-清理:老年代使用
标记-压缩

收集器:
串行收集器:-XX:+UseSerialGC 最古老、最稳定,效率高,收集垃圾时只执行GC线程,可能会出现较长时间的停顿 复制算法
并行收集器:-XX:+ParNewGC 新生代并行,老年代串行 -XX:ParallelGCThreads 限制线程数量 复制算法
Parallel收集器:类似ParNew,新生代复制算法,老年代标记-压缩,更加关注吞吐量,  -XX:UseParallelGC,老年代串行  -XX:UseParallelOldGC,老年代并行
CMS收集器:Concurrent Mark Sweep 并发(gc线程与用户线程一起执行)标记清除,并发阶段会降低吞吐量,老年代收集器(新生代使用ParNew) -XX:UseConcMarkSweepGC 内存预留不够时,会导致concurrent mode failure,可以使用串行收集器作为后备 -XX:CMSInitiatingOccupancyFraction,设置GC的阈值,堆空间达到设定的阈值,进行回收
CMS收集器:初始标记(根可以直接关联到的对象,速度快)-->并发标记(主要标记过程,标记全部对象)-->重新标记(停止用户进程,进行标记修正)-->并发清除(基于标记结果,直接清理对象)
-XX:+UseCMSCompactAtFullCollection Full GC后,进行一次整理
-XX:+CMSFullGCsBeforeCompaction 设置进行几次Full GC后,进行一次碎片整理
-XX:ParallelCMSThreads 设定CMS的线程数量
-XX:+CMSClassUnloadingEnabled 允许对类元数据进行回收
-XX:CMSInitiatingPermOccupancyFraction 当永久区占有率达到这一百分比时,启动CMS回收
-XX:UseCMSInitiatingOccupancyOnly 表示只有到达阈值的时候,才进行CMS回收

-XX:MaxGCPauseMills 最大停顿时间,GC尽力保证回收时间不超过设定值
-XX:GCTimeRatio 0-100的取值范围,垃圾收集时间占总时间的比,默认99,即最大允许1%时间做GC
这两个参数是矛盾的,因为停顿时间和吞吐量不可能同时调优

posted on 2021-01-17 16:06  渐行渐远的那些人  阅读(124)  评论(0编辑  收藏  举报