【问题标题】:Max and min time benchmark in Java with JMH使用 JMH 的 Java 中的最大和最小时间基准
【发布时间】:2021-04-04 18:27:11
【问题描述】:

我想编写一个基准来跟踪执行某些 Java 代码所需的最大、最小和平均时间。

我阅读了有关 JMH(Java Microbenchmark Harness)的信息,它似乎符合我的需求,但我不太确定应该使用哪种模式:

  • Mode.Throughput 通过在有时间限制的迭代中连续调用基准方法并计算我们执行该方法的次数来测量原始吞吐量。

    这似乎不是我要找的。​​p>

  • Mode.AverageTime 测量执行基准方法所需的平均时间。

    这应该是我需求的 1/3。

  • Mode.SingleShotTime 测量单个基准测试方法执行需要多长时间。

    这似乎不是我要找的。​​p>

  • Mode.SampleTime 对我来说是最模糊的。

    Documentations on examples 声明它通过在时间限制的迭代中运行方法来“采样”执行时间,但它不是测量总时间,而是测量“一些”基准方法调用所花费的时间。什么意思?

什么模式可以为我提供最小和最大时间?是否还有其他模式,或者是否有其他框架可以完成这项工作?

【问题讨论】:

  • SingleShotTime 用于测量 启动,如 here 所述
  • 我承认我也对 SampleTime 感到困惑 - 我理解您链接的评论的含义,但我还没有找到它的真正用例。

标签: java benchmarking microbenchmark jmh


【解决方案1】:

如果您使用@BenchmarkMode(Mode.AverageTime) 运行@Benchmark,作为奖励,您将获得如下输出:

Result "StopAllBenchmarks.measureRight":
 2.387 ±(99.9%) 0.307 ns/op [Average]
 (min, avg, max) = (2.339, 2.387, 2.526), stdev = 0.080
 CI (99.9%): [2.079, 2.694] (assumes normal distribution)

注意min, avg, max

【讨论】:

    猜你喜欢
    • 2019-08-31
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2013-07-12
    相关资源
    最近更新 更多