3

我正在探索 OpenJDK JMH 以对我的代码进行基准测试。根据我的理解,JMH 默认会分叉多个 JVM,以保护测试免受之前收集的“配置文件”的影响。此示例代码对此进行了很好的解释。

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

1) 有 1 个分叉,100 次迭代 2) 有 10 个分叉,每个 10 次迭代

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

4

2 回答 2

4

这取决于。需要多个分叉来估计 run-to-run 方差,请参阅JMHSample_13_RunTo_Run。因此,单叉肯定更差。然后,如果您问哪个更好:10x100 运行或 100x10 运行,这又取决于更糟糕的问题——运行间差异或运行中差异。

于 2014-11-28T19:55:01.333 回答
1

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

如果您想要一种严格的统计方法来确定这种权衡,请查看“合理时间内的严格基准测试”(Kalibera,Jones)。等式 3 通过使用观察到的分叉之间和迭代之间的差异,给出了每个级别的最佳计数(在您的情况下,这些将是要运行的分叉数和每个分叉的迭代次数)。

于 2018-02-05T18:35:34.940 回答