在JMH中迭代次数和分叉数之间的正确平衡

时间:2014-11-28 06:01:21

标签: java microbenchmark jmh

我正在探索OpenJDK JMH来对我的代码进行基准测试。根据我的理解,JMH默认会分配多个JVM,以便从以前收集的“配置文件”中保护测试。这在sample code中得到了很好的解释。

但是我的问题是,如果我将使用以下两种方法执行,我将对结果产生什么影响:

1)用1个叉子,100次迭代 2)10叉,每次10次迭代

哪种方法会给出更准确的结果?

2 个答案:

答案 0 :(得分:4)

这取决于。需要多个叉来估计逐次运行的方差,请参阅JMHSample_13_RunTo_Run。因此,单个叉子肯定更糟。然后,如果你问什么更好:10x100运行或100x10运行,这又取决于什么是更糟糕的问题 - 运行 - 运行差异,或运行中的差异。

答案 1 :(得分:0)

这取决于每个fork与每次迭代的结果差异,这是特定于工作负载的。

如果您想要一种严格的统计方法来计算这种权衡,请查看"Rigorous Benchmarking in Reasonable Time" (Kalibera, Jones)。公式3通过使用观察到的叉子之间和迭代之间的差异,给出了每个级别的最佳计数(在您的情况下,这些将是运行的叉子数量和每个叉子的迭代次数)。