我正在比较一个项目的两个分支的性能,一个比另一个慢得多。我注意到GC运行计数较高(见下图)。
更有趣的是,运行时间要高出许多倍,远远超过额外运行所解释的时间。什么可以解释运行次数增加40%(ish),将运行时间增加6倍?更大的物体?物体太多了?还有哪些旋钮在这里调整,有什么效果? (一些好的链接可以作为答案)
答案 0 :(得分:2)
以下是一些基本指南,说明如何分析应用程序的两个分支/版本的性能和GC行为:
-XX:+PrintClassHistogramBeforeFullGC -XX:+PrintClassHistogramAfterFullGC
jmap -histo $pid
。特别是如果你看到可疑的ResponseTimes / CPU峰值等性能比较的基本准则:要有效地比较性能,您需要能够为应用程序的两个版本生成相同的工作负载,并运行一些预热时间然后在稳定的阶段收集数据。