(1)总体GC策略 = ParNew + CMS + Serial Old(后备预案)
(2)后备预案:CMS期间GC和用户线程同时运作,会产生浮动垃圾,此时CMS预留空间(1-92%)不足时,GC失败,JVM启动临时GC收集器
(3)CMS缺陷:
CPU密集型,占用应用不低于25%CPU使用率
GC同时产生浮动垃圾,由于GC与用户线程并发运行,后者还在不停产生浮动垃圾
CMS基于标记-清除算法,会有大量内存碎片产生
CUSTOM_JVM_ONLINE=" -server
-Dfile.encoding=UTF-8
-Dsun.jnu.encoding=UTF-8
-Djava.net.preferIPv6Addresses=false
-Djava.io.tmpdir=/tmp
-Duser.timezone=GMT+08
-Xmx6g
-Xms6g
-XX:MetaspaceSize=128m // 元空间大小,达到则进行内存回收,
-XX:MaxMetaspaceSize=256m // 根据回收情况决定要不要增加元空间
-XX:SurvivorRatio=8
-XX:NewRatio=3 // 新生代与老年代内存占比:1:3,也可以通过-Xmn设置具体大小
-XX:+HeapDumpOnOutOfMemoryError
-XX:+DisableExplicitGC // JVM忽略系统级GC调用
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-XX:+PrintCommandLineFlags
-XX:+UseConcMarkSweepGC
-XX:+UseParNewGC // 强制新生代使用多线程并行收集,标记复制算法,能够与CMS配合工作
-XX:ParallelCMSThreads=4 // 老年代并发收集线程数
-XX:+CMSClassUnloadingEnabled // 对永久代进行垃圾回收
-XX:+UseCMSCompactAtFullCollection // 标记清除产生内存碎片大对象分配不了,即将Full Gc时开启整理
-XX:CMSFullGCsBeforeCompaction=1 // 执行多少次不压缩的Full Gc后,跟着来一次整理压缩
-XX:CMSInitiatingOccupancyFraction=72" // CMS在老年代内存使用率达到72%时开始垃圾收集
项目中用到的GC参数
最新推荐文章于 2022-04-11 21:34:04 发布