运行 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_SBjava.lang.invoke.StringConcatFactory.Strategy 枚举中的枚举常量。