JMH 给出繁忙的吞吐量值

JMH gives hectic throughput values

我 运行宁 some benchmarks 和 JMH 在一起,我得到每次迭代的繁忙吞吐量值,有时会有 +/- 50% 的差异。 (i7 4770K,Windows 7 x64,Java 1.8u31,JMH 0.9 - 无法升级)。由于对整数进行装箱和拆箱并且大量使用同步块,基准测试会产生大量垃圾。将迭代 运行 时间从 1 秒增加到 5 秒会产生更小的方差。

我的问题是:

如果你可以使用 0.9.1+ 版本,你应该看看添加到 JMH 的 perfasm 分析器。它允许您将代码的汇编映射到每条指令所花费的时间。但是,它会要求您使用 Linux 框,因为它使用 perf 命令。

除此之外,您的基准测试允许进行相当多的优化,但我认为这是有意为之的。您不会通过黑洞消耗最终结果,但您选择在某些处理之间消耗数据位。这种方法很容易出错,因此我建议您无论如何都要真正查看它产生的汇编代码,这样您就可以知道您正在测量的是什么!