一次CMS GC 后,YGC时间 会减少一半,性能提高一倍。这个是什么原因导致的呢? 有什么方法可以不通过CMS GC,也能做到YGC时间减少一半吗?
可以看下你的jvm参数,听你描述感觉像使用了CMSScavengeBeforeRemark这个参数
我拿你的参数检查了下,你可以看下参数查询 有几个参数使用姿势不太正确,导致没有生效,当然你也可以自己去使用xxfox去检查下参数看下用法以及画然后你确实是使用了CMSScavengeBeforeRemark,这个参数的作用是在cms gc remark之前做一次ygc,减少gc roots扫描的对象数,从而提高remark的效率。所以你描述的现象,应该就是这个参数引起的。
没有什么特殊配置,参数如下: -Xms6144m -Xmx6144m -Xmn4096m -XX:+UseConcMarkSweepGC -XX:+CMSScavengeBeforeRemark -XX:MaxTenuringThreshold=15-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/applogs/systemerror.dump -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+UseCMSInitiatingOccupancyOnly -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -XX:+UseParNewGC -XX:+PrintGCDetails -Xloggc:/data/applogs/systemgc_${DATE_FORMAT}.log
可以看下你的jvm参数,听你描述感觉像使用了CMSScavengeBeforeRemark这个参数