JMH:性能比较

时间:2015-07-02 08:11:09

标签: java benchmarking 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之间的真正差异?

2 个答案:

答案 0 :(得分:0)

IIRC,基准分数(ops / s)是90%分布的算术平均值(即滤除极端异常值)。因此,无论您如何对其进行切片,版本2在所有基准测试中得分都会更高。

答案 1 :(得分: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频率,以避免因涡轮增压,过热和电源管理调控器引起的差异。