官术网_书友最值得收藏!

Benchmark modes

You can find examples of how to use the JMH at the following link: http://hg.openjdk.java.net/code-tools/jmh/file/tip/jmh-samples/src/main/java/org/openjdk/jmh/samples/. One way is by using the JMHSample_02_BenchmarkModes class, which demonstrates the use of different modes. There are five modes:

  • Mode.Throughput: This means that the benchmark method is being continuously invoked in a time-bound iteration and calculates how many times this method can be invoked.
  • Mode.AverageTime: This measures similarly to Mode.Throughput, but calculates the average execution time.

  • Mode.SampleTime: This measures similarly to Mode.Throughput, but samples the execution time for time-bound iterations.
  • Mode.SingleShotTime: This measures the invocation time of a single method, which can be useful for cold startup testing. Using this mode, you specify that you don't want to call the benchmark method continuously.
  • Mode.All: This does all of the above. Multiple modes let you specify modes that you want separated by commas—@BenchmarkMode({Mode.Throughput, Mode.AverageTime, Mode.SampleTime, Mode.SingleShotTime}).

We could rewrite our testMethod() as follows:

@Benchmark
@BenchmarkMode(Mode.AverageTime)
public void testMethod() {
int a = 3;
int b = 4;
int c = a + b;
}

And by running it with five iterations and a single fork, the output will be as follows:

 # Run progress: 0.00% complete, ETA 00:00:10
# Fork: 1 of 1
# Warmup Iteration 1: ≈ 10?? s/op
# Warmup Iteration 2: ≈ 10?? s/op
# Warmup Iteration 3: ≈ 10?? s/op
# Warmup Iteration 4: ≈ 10?? s/op
# Warmup Iteration 5: ≈ 10?? s/op
Iteration 1: ≈ 10?? s/op
Iteration 2: ≈ 10?? s/op
Iteration 3: ≈ 10?? s/op
Iteration 4: ≈ 10?? s/op
Iteration 5: ≈ 10?? s/op

Result "org.sample.MyBenchmark.testMethod":
≈ 10?? s/op

# Run complete. Total time: 00:00:10

Benchmark Mode Cnt Score Error Units
MyBenchmark.testMethod avgt 5 ≈ 10?? s/op

This means that the average execution time for testMethod() is 10-9 which is equal to 0.000000001 seconds. If you want to get the results in another time unit, you have to use the @OutputTimeUnit annotation.

主站蜘蛛池模板: 翁源县| 杨浦区| 琼结县| 库尔勒市| 会理县| 昂仁县| 张家港市| 乌鲁木齐县| 疏勒县| 佛山市| 建水县| 莱芜市| 宁晋县| 内乡县| 汉阴县| 准格尔旗| 桐城市| 衡山县| 马尔康县| 黄平县| 龙岩市| 翁源县| 常德市| 罗平县| 石泉县| 德格县| 广元市| 临武县| 扬中市| 静海县| 万荣县| 湟源县| 雷州市| 商都县| 措勤县| 碌曲县| 武汉市| 镇江市| 遂宁市| 澎湖县| 寻乌县|