有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java纠正了JMH中迭代次数和分叉次数之间的平衡

我正在探索OpenJDK JMH,以便对我的代码进行基准测试。根据我的理解,JMH默认分叉多个JVM,以保护测试不受以前收集的“概要文件”的影响。这在本书中得到了很好的解释

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

1)具有1个fork,100次迭代 2) 使用10个fork,每次迭代10次

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


共 (2) 个答案

  1. # 1 楼答案

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

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

  2. # 2 楼答案

    视情况而定。需要多个分叉来估计运行到运行的差异,请参见JMHSample_13_RunTo_Run。因此,单支叉子肯定更糟糕。然后,如果你问什么更好:10x100运行或100x10运行,这同样取决于运行到运行的差异或运行中的差异是什么