问题
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?
回答1:
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".
来源:https://stackoverflow.com/questions/31292059/strange-output-when-using-jmh