当前位置: 首页 > 知识库问答 >
问题:

修正了JMH迭代次数和分叉次数之间的平衡

宇文和昶
2023-03-14

我正在探索OpenJDK JMH测试我的代码。根据我的理解,默认情况下,JMH会派生多个JVM,以保护测试不受之前收集的“概要文件”的影响。这个示例代码对此做了很好的解释。

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

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

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

共有2个答案

澹台啸
2023-03-14

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

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

梁丘柏
2023-03-14

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

 类似资料:
  • 问题内容: 在下面的代码中,迭代运行两次。 是否可能恰好在第一次迭代和第二次迭代之间运行“ test2 <-true”? 我的意思是,在第一次迭代结束而第二次迭代未开始时,是否将true发送给“ test2”? 问题答案: 是。由于您的频道已缓冲,可以保存1个值。主执行流程可以继续进行,而无需您的匿名goroutine读取您发送到通道的值,并且可以在goroutine唤醒并读取通道上的值之前在通道

  • 我想知道gensim的LDA(潜在Dirichlet分配)算法的默认迭代次数。我认为文档中没有提到这一点。(迭代次数由初始化LdaModel时的参数迭代次数表示)。谢谢

  • 在Django模板中,我想创建一个遍历列表的for循环。在循环过程中,我还希望能够使用循环的迭代次数。 例如,如果有4个元素,那么: 应打印以下内容: 我该怎么做呢?

  • 问题内容: 我希望下面的循环迭代六次,而不是用python3迭代三遍。我不了解这种行为。我知道列表在删除元素时会发生变化,但是我不知道这会如何影响for循环条件。为什么循环迭代少于六次? 问题答案: 您将通过删除循环的每个迭代中的第一个元素,因此迭代器将分3步清空,因为迭代器将在下一次迭代中删除的元素之后移至该元素。您可以检查迭代器当前所在的元素,以及下面代码中的列表状态 输出是 您可以将其视为指

  • 我想比较我的Android应用程序的两个日期,但我遇到了一个非常奇怪的问题。 例如: 如果我将过去的

  • 假设我有一个音乐平台的用户监听的下表: 其中,id(int)是收听音乐(或书籍或任何其他材料)的用户的记录,user_id(int)是收听者id,started_at(timestamp)是用户开始收听的时间,finished_at是用户完成收听的时间 我需要做的是找出用户第一次和第二次收听之间的平均时间。例如,对于user_id=101的第一个用户,它将是: “2017-10-05 15:15: