JDK 8中 GC 日志片段:
我们对整个日志做了统计,有以下发现:
并发标记时机不同,混合回收的时机也不同;
单次 GC 中对象复制的耗时不同,JDK 11 明显更长;
总体 GC 次数 JDK 11 得更多,包括了并发标记的停顿次数;
总体 GC 的耗时 JDK 11 更多。
针对 Young GC 的性能劣化,我们重点关注测试了和 Young GC 相关的参数,例如:调整
UseDynamicNumberOfGCThreads、G1UseAdaptiveIHOP 、GCTimeRatio 均没有效果。
下面我们尝试使用不同的工具来进一步定位到底哪里出了问题。
3.3JFR分析-确认日志分析结果
=================
毕昇 JDK 11和毕昇 JDK 8 都引入了 JFR,JFR 作为 JVM 中问题定位的新贵,我们也在该案例进行了尝试,关于JFR的原理和使用,参考本系列的技术文章:Java Flight Recorder - 事件机制详解。
3.3.1JDK 11总体信息
===============
JDK 8 中通过 JFR 收集信息。
3.3.2JDK 8总体信息
==============
JFR 的结论和我们前面分析的结论一致,JDK 11 中中断比例明显高于 JDK 8。
3.3.3JDK 11中垃圾回收发生的情况
=====================
3.3.4JDK 8中垃圾回收发生的情况
====================