Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Strange output when using JMH

I'm using jmh to benchmark a simple application (from SO question Unexpected Scalability results in java fork-join) using maven and following the command-line approach as advised in http://openjdk.java.net/projects/code-tools/jmh/. After successfully setting up and building the benchmark, I get the following benchmark results using the avgt mode:

C:\Users\username\my-app\test>java -jar target/benchmarks.jar -bm avgt -f 1
# JMH 1.10.1 (released 13 days ago)
# VM invoker: C:\Program Files\Java\jre1.8.0_45\bin\java.exe
# VM options: <none>
# Warmup: 20 iterations, 1 s each
# Measurement: 20 iterations, 1 s each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Average time, time/op
# Benchmark: org.sample.MyBenchmark.testMethod

# Run progress: 0,00% complete, ETA 00:00:40
# 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
# Warmup Iteration   6: ? 10?? s/op
# Warmup Iteration   7: ? 10?? s/op
# Warmup Iteration   8: ? 10?? s/op
# Warmup Iteration   9: ? 10?? s/op
# Warmup Iteration  10: ? 10?? s/op
# Warmup Iteration  11: ? 10?? s/op
# Warmup Iteration  12: ? 10?? s/op
# Warmup Iteration  13: ? 10?? s/op
# Warmup Iteration  14: ? 10?? s/op
# Warmup Iteration  15: ? 10?¹? s/op
# Warmup Iteration  16: ? 10?? s/op
# Warmup Iteration  17: ? 10?¹? s/op
# Warmup Iteration  18: ? 10?? s/op
# Warmup Iteration  19: ? 10?¹? s/op
# Warmup Iteration  20: ? 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
Iteration   6: ? 10?? s/op
Iteration   7: ? 10?¹? s/op
Iteration   8: ? 10?? s/op
Iteration   9: ? 10?? s/op
Iteration  10: ? 10?¹? s/op
Iteration  11: ? 10?? s/op
Iteration  12: ? 10?? s/op
Iteration  13: ? 10?¹? s/op
Iteration  14: ? 10?? s/op
Iteration  15: ? 10?? s/op
Iteration  16: ? 10?¹? s/op
Iteration  17: ? 10?? s/op
Iteration  18: ? 10?¹? s/op
Iteration  19: ? 10?¹? s/op
Iteration  20: ? 10?¹? s/op


Result "testMethod":
? 10?¹? s/op


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

Benchmark               Mode  Cnt    Score     Error  Units
MyBenchmark.testMethod  avgt   20  ? 10?¹?             s/op

I'm not sure how to interpret this output, but I'm quite sure something went wrong...? Any idea what or how to debug this?

like image 826
Codiloo Avatar asked Feb 09 '23 15:02

Codiloo


1 Answers

JMH output makes use of extended Unicode characters. In particular, ? 10?? s/op" probably means "≈ 10⁻¹⁰ s/op". Use a terminal that supports Unicode properly, see this.

Apart from Unicode troubles, your benchmark seems to be too short, and so JMH presents an order of magnitude estimate instead of showing "0.000 s/op".

like image 92
Aleksey Shipilev Avatar answered Feb 12 '23 05:02

Aleksey Shipilev