Java 中的最大和最小时间基准与 JMH
Max and min time benchmark in Java with JMH
我想编写一个基准来跟踪执行某些 Java 代码所需的最大、最小和平均时间。
我了解了 JMH(Java Microbenchmark Harness),它似乎符合我的需求,但我不太确定我应该使用哪种模式:
Mode.Throughput
通过在限时迭代中连续调用基准方法并计算我们执行该方法的次数来测量原始吞吐量。
好像不是我要找的
Mode.AverageTime
测量执行基准方法所需的平均时间。
这应该是我需求的1/3。
Mode.SingleShotTime
测量单个基准方法执行需要多长时间 运行.
好像不是我要找的
Mode.SampleTime
对我来说是最晦涩的
Documentations on examples 声明它通过 运行 在有时间限制的迭代中对方法进行“采样”,但它不是测量总时间,而是测量花费的时间“一些”基准方法调用。这是什么意思?
什么模式可以提供最短和最长时间?是否有更多的模式,或者是否有其他框架来完成这项工作?
如果您 运行 您的 @Benchmark
和 @BenchmarkMode(Mode.AverageTime)
,作为奖励,您将得到如下输出:
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
我想编写一个基准来跟踪执行某些 Java 代码所需的最大、最小和平均时间。
我了解了 JMH(Java Microbenchmark Harness),它似乎符合我的需求,但我不太确定我应该使用哪种模式:
Mode.Throughput
通过在限时迭代中连续调用基准方法并计算我们执行该方法的次数来测量原始吞吐量。好像不是我要找的
Mode.AverageTime
测量执行基准方法所需的平均时间。这应该是我需求的1/3。
Mode.SingleShotTime
测量单个基准方法执行需要多长时间 运行.好像不是我要找的
Mode.SampleTime
对我来说是最晦涩的Documentations on examples 声明它通过 运行 在有时间限制的迭代中对方法进行“采样”,但它不是测量总时间,而是测量花费的时间“一些”基准方法调用。这是什么意思?
什么模式可以提供最短和最长时间?是否有更多的模式,或者是否有其他框架来完成这项工作?
如果您 运行 您的 @Benchmark
和 @BenchmarkMode(Mode.AverageTime)
,作为奖励,您将得到如下输出:
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