Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JMH时的奇怪输出_Java_Maven_Fork Join_Jmh - Fatal编程技术网

Java 使用JMH时的奇怪输出

Java 使用JMH时的奇怪输出,java,maven,fork-join,jmh,Java,Maven,Fork Join,Jmh,我正在使用jmh使用maven并遵循中建议的命令行方法对一个简单的应用程序(来自SO问题)进行基准测试。成功设置和构建基准后,我使用avgt模式获得以下基准结果: 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\j

我正在使用jmh使用maven并遵循中建议的命令行方法对一个简单的应用程序(来自SO问题)进行基准测试。成功设置和构建基准后,我使用avgt模式获得以下基准结果:

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
C:\Users\username\my app\test>java-jar target/benchmarks.jar-bm avgt-f 1
#JMH 1.10.1(13天前发布)
#VM调用程序:C:\Program Files\Java\jre1.8.0\U 45\bin\Java.exe
#虚拟机选项:
#预热:20次迭代,每次1s
#测量:20次迭代,每次1s
#超时:每次迭代10分钟
#线程:1个线程,将同步迭代
#基准模式:平均时间,时间/操作
#基准:org.sample.MyBenchmark.testMethod
#运行进度:0,00%完成,预计时间00:00:40
#叉子:1/1
#预热迭代1:?10?? s/op
#预热迭代2:?10?? s/op
#预热迭代3:?10?? s/op
#预热迭代4:?10?? s/op
#预热迭代5:?10?? s/op
#预热迭代6:?10?? s/op
#预热迭代7:?10?? s/op
#预热迭代8:?10?? s/op
#预热迭代9:?10?? s/op
#预热迭代10:?10?? s/op
#预热迭代11:?10?? s/op
#预热迭代12:?10?? s/op
#预热迭代13:?10?? s/op
#预热迭代14:?10?? s/op
#预热迭代15:?10?¹? s/op
#预热迭代16:?10?? s/op
#预热迭代17:?10?¹? s/op
#预热迭代18:?10?? s/op
#预热迭代19:?10?¹? s/op
#预热迭代20:?10?¹? s/op
迭代1:?10?¹? s/op
迭代2:?10?¹? s/op
迭代3:?10?? s/op
迭代4:?10?¹? s/op
迭代5:?10?¹? s/op
迭代6:?10?? s/op
迭代7:?10?¹? s/op
迭代8:?10?? s/op
迭代9:?10?? s/op
迭代10:?10?¹? s/op
迭代11:?10?? s/op
迭代12:?10?? s/op
迭代13:?10?¹? s/op
迭代14:?10?? s/op
迭代15:?10?? s/op
迭代16:?10?¹? s/op
迭代17:?10?? s/op
迭代18:?10?¹? s/op
迭代19:?10?¹? s/op
迭代20:?10?¹? s/op
结果“testMethod”:
? 10?¹? s/op
#运行完成。总时间:00:00:40
基准模式Cnt分数误差单位
MyBenchmark.testMethod avgt 20?10?¹?             s/op

我不确定如何解释这个输出,但我很确定出了什么问题。。。?知道如何调试吗?

JMH输出使用扩展的Unicode字符。特别是?10?? s/op“可能意味着”≈ 10⁻¹⁰ 使用正确支持Unicode的终端,请参阅


除了Unicode问题之外,您的基准似乎太短,因此JMH提供了一个数量级估计值,而不是显示“0.000 s/op”。

要查看JMH输出中更精确的数字,您可以更改要使用的时间单位,例如

@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public class MyBenchmark {
    ...

如果您看到的是实际的问号而不是字符,则表示您的输出设备(终端)不支持JMH试图显示的字符的图示符。这可能是由于某些设置中的某些环境变量设置不正确,或者甚至是字体不完整。是否确定?将输出重定向到文本文件也会给我“问号”。使用-rff(写入文件)时选项中,我得到一个摘要,其中显示0000000,单位为s/o。输出中的?确实是由于我使用的终端不正确支持unicode造成的。查看步骤1后生成的MyBenchmark.java源文件,testMethod结果为空(因此很快终止)。我只是在其中插入了我的基准代码,它就工作了。但是,这不是使用jmh的正确/最佳方式,对吗?请查看jmh示例,了解如何使用它: