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