JMH提供了繁忙的吞吐量值

时间:2015-02-24 22:37:25

标签: java jmh

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

我的问题是:

  • 如何发现这种差异的来源?
  • 为什么有时会在预热期间获得显着更高的吞吐量值?

1 个答案:

答案 0 :(得分:0)

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

除此之外,您的基准测试允许进行相当多的优化,但我认为这是预期的。您不会消耗黑洞的最终结果,但您选择在某些处理之间消耗一些数据。这种方法非常容易出错,因此我建议您真正查看无论如何都会采用的汇编代码,以便您可以确定实际测量的是什么!