运行 java9 下的 jmh 测试失败
Failure to run a jmh test under java9
所以基本上我正在尝试 运行 形式的测试:
@Benchmark
@Fork(jvmArgsAppend = "-Djava.lang.invoke.stringConcat=java.lang.invoke.StringConcatFactory.Strategy.BC_SB", value = 1)
public String java9StringBuilder(ThreadState state) {
// some implementation here
}
运行 它与:
java -jar benchmarks.jar MyFullClassNameHere -v extra
不幸的是它失败了forked VM failed with exit code 1
并且没有更多的“详细”输出。
我做错了什么?
我确实收到了这些警告:
WARNING: Unknown module: org.openjdk specified to --add-exports
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.openjdk.jmh.util.Utils (file:/Path/Here/benchmarks.jar) to field java.io.Console.cs
WARNING: Please consider reporting this to the maintainers of org.openjdk.jmh.util.Utils
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
本例中的 Java 9 没有问题。您正在为分叉的 VM 提供 JVM 选项,您是否先尝试 运行 没有 JMH 的选项?然后你会发现命令不正确,正确的形式是:
- @Fork(jvmArgs = "-Djava.lang.invoke.stringConcat=java.lang.invoke.StringConcatFactory.Strategy.BC_SB")
+ @Fork(jvmArgs = "-Djava.lang.invoke.stringConcat=BC_SB")
...因为 BC_SB
是 java.lang.invoke.StringConcatFactory.Strategy
枚举中的枚举常量。
所以基本上我正在尝试 运行 形式的测试:
@Benchmark
@Fork(jvmArgsAppend = "-Djava.lang.invoke.stringConcat=java.lang.invoke.StringConcatFactory.Strategy.BC_SB", value = 1)
public String java9StringBuilder(ThreadState state) {
// some implementation here
}
运行 它与:
java -jar benchmarks.jar MyFullClassNameHere -v extra
不幸的是它失败了forked VM failed with exit code 1
并且没有更多的“详细”输出。
我做错了什么?
我确实收到了这些警告:
WARNING: Unknown module: org.openjdk specified to --add-exports
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.openjdk.jmh.util.Utils (file:/Path/Here/benchmarks.jar) to field java.io.Console.cs
WARNING: Please consider reporting this to the maintainers of org.openjdk.jmh.util.Utils
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
本例中的 Java 9 没有问题。您正在为分叉的 VM 提供 JVM 选项,您是否先尝试 运行 没有 JMH 的选项?然后你会发现命令不正确,正确的形式是:
- @Fork(jvmArgs = "-Djava.lang.invoke.stringConcat=java.lang.invoke.StringConcatFactory.Strategy.BC_SB")
+ @Fork(jvmArgs = "-Djava.lang.invoke.stringConcat=BC_SB")
...因为 BC_SB
是 java.lang.invoke.StringConcatFactory.Strategy
枚举中的枚举常量。