项目中用到的GC参数

(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%时开始垃圾收集

你可能感兴趣的:(理解Java虚拟机)