【问题标题】:Why does JMH @Measurement (and @Warmup) specify a fixed time rather than a fixed number of operations?为什么 JMH @Measurement(和 @Warmup)指定固定时间而不是固定数量的操作?
【发布时间】:2018-08-27 17:55:35
【问题描述】:

我认为这是微基准测试中的潜在缺陷之一。如果您指定@Measurement(或@Warmup)将运行固定的时间,这意味着,当比较不同的运行(例如,不同的平台、不同版本的 VM 等)时,您将获得更少的“苹果对苹果”的比较,因为运行不会做同样的工作!

如果一次运行执行得更快,那么它将在给定时间内执行更多操作。这会引入可能会影响结果的混杂因素:更多的​​动态优化机会、缓存差异、每个操作的不同统计信息等。

另一方面,如果您指定固定数量的操作,则每次运行都在做完全相同的工作量,从而提高对结果的信心。

那么,JMH 使用这种指定固定时间量而不是固定操作次数的方法的原因是什么?是否有一些重要的原因推动我错过了这个设计决策?我在 JMH 文档和在线讨论中都进行了搜索,但我无法找到这个问题的答案。

【问题讨论】:

    标签: jmh


    【解决方案1】:

    一个固定的数字可能是一个糟糕的选择。假设我们选择 10,000,这足以让代码预热。如果操作很短,这可能不足以获得最佳结果,但如果需要 10 秒,那么 10 次运行将需要 12 天才能获得结果。跑一段固定的时间你至少知道需要多长时间。

    在实际使用中,您可能会运行代码一段已知的时间,而不是固定的迭代次数。

    【讨论】:

      猜你喜欢
      • 2023-03-31
      • 1970-01-01
      • 2017-08-21
      • 1970-01-01
      • 2016-06-04
      • 2012-05-12
      • 2017-08-17
      • 1970-01-01
      相关资源
      最近更新 更多