性能问答>再询问CMS GC 后,YGC时间 会减少一半>
6回复
2年前

再询问CMS GC 后,YGC时间 会减少一半



各位大佬,麻烦帮忙看下这个问题。
我们线上Java应用在一次CMS GC 后,YGC时间 会减少一半,性能提高一倍。这个是什么原因导致的呢? 有什么方法可以不通过CMS GC,也能做到YGC时间减少一半吗?
JVM参数如下:
-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

4647 阅读
请先登录,再评论

补充下,StringTable为什么会影响YGC 可以看下这篇 https://heapdump.cn/article/216761

2年前

哈哈

2年前

YGC过程的GCRoots里包括了StringTable,SystemDictionary等,这几个表的update在CMS GC或者Full GC的时候才有机会进行清理,如果这些表里指向的Dead Object比较多,那可能会导致YGC扫描时间比较长,后面我们会发篇文章出来,可以关注一下

2年前
回复 你假笨:

好的大佬,继续找下到底是StringTable还是SystemDictionary,谢谢大佬 。

2年前回复
回复 云巅:

找到到底是哪种情况,如果是StringTable就需要找出哪里调用String.intern,如果是SystemDictionary,就要看哪里在不断创建类

2年前回复
回复 你假笨:

好的,大佬,有什么好的解决方案吗 ?

2年前回复