2015-07-02 264 views
-1

我尝试改进我的程序的性能。我用JMH来比较我的两个版本,但我不知道是否有真正的差异。JMH:性能比较

我的结果举例:

   Version1(op/s) score error(op/s)   Version2  score error 

Benchmark 1 12382150,338   1277638,481  18855038,903 50835,395 

Benchmark 2  11708047,2   4061755,193  18843828,659 41966,689 

Benchmark 3  7814465,4   9483927,071  18821356,961 72364,651 

Benchmark 4 10481146,451    464691,58  13936537,089 40726,506 

Benchmark 5 6863734,072   175974,219   9709381,687 21774,816 

这些结果可以显示1版和第2版之间的真正区别?

+0

我不明白你的问题。基准数据有明显的差异,第2版显然在所有基准测试中都更快。你在问什么,你期望什么样的答案? –

+0

是的,但分数给出的置信区间非常大。对于基准3,第一个区间(对于版本1)是[-1669461,671,17298392,471],第二个(对于版本2)是[18748992,310,18893721,612]。它的价值很接近,不是吗? – lguerin

回答

0

IIRC,基准分数(ops/s)是90%分布的算术平均值(即极端异常值被滤除)。因此,无论你如何分割,版本2在所有基准测试中得分更高。

0

根据我的经验,您需要考虑操作的规模来推理它。你是基准测试方法,其长度相当微不足道,并且可能导致结果难以阅读。 例如,从结果推导基准1:

   Version1     Version2 
Benchmark 1 12382150 +-1277638 ops/s 18855038+-50835 ops/sec 
same as  80+-7 ns/op    53+-1 ns/op 

的报告是很容易使用“-bm avgt -tu NS”,这将设置基准标记模式,以平均时间和时间单位,以纳秒来解决。 基准的规模在决定改进的重要性以及对于所讨论的基准应该有多怀疑时也很有用。 如果您担心基准测试中存在差异,则还应确保以充足的迭代次数运行基准测试(-i)和分叉(-f)。您还应该确保在安静的机器上运行基准测试。还要确保可以在基准测试期间设置CPU频率,以避免由涡轮增压,过热和电源管理调速器造成的变化。