我在使用 JMH 时遇到了一些问题。
因此,我在 Intellij Idea 中创建了一个空项目,然后在项目结构中添加jmh-core jar 文件。最后,尝试运行示例,例如
import org.openjdk.jmh.annotations.GenerateMicroBenchmark;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
public class JMHSample_01_HelloWorld {
@GenerateMicroBenchmark
public void wellHelloThere() {
// this method was intentionally left blank.
}
public static void main(String[] args) throws RunnerException {
Options opt = new OptionsBuilder()
.include(".*" + JMHSample_01_HelloWorld.class.getSimpleName() + ".*")
.forks(1)
.build();
new Runner(opt).run();
}
}
但结果是
No matching benchmarks. Miss-spelled regexp?
Use EXTRA verbose mode to debug the pattern matching.
Process finished with exit code 0
随着使用verbosity(VerboseMode.EXTRA)
No matching benchmarks. Miss-spelled regexp?
Benchmarks:
Process finished with exit code 0
我试图将输出路径更改为projectFolder\target\classes
但没有任何改变。然后我在调试模式下查看了源代码,发现resource = "/META-INF/MicroBenchmarks"
,urls.hasMoreElements()
是假的,因此benchmarks
是空的。然后我看到了示例 jar 文件,其中包含 MicroBenchmarks 文件,其中包含有关测试的信息并且运行良好。
所以,问题是我做错了什么?我必须手动编写有关测试的信息吗?