1

我在使用 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 文件,其中包含有关测试的信息并且运行良好。

所以,问题是我做错了什么?我必须手动编写有关测试的信息吗?

4

1 回答 1

4

请按照 JMH 页面上的说明设置基准项目,即:

“确保在获得支持之前尝试过这些事情: -原型提供了黄金构建配置。尝试生成干净的 JMH 基准测试项目并将基准移植到那里。升级到较新的 JMH 版本时尝试这一点很重要,因为细微的差异在构建配置中可能归因于您所看到的故障。”

如果你遵循它,你会注意到你还需要添加jmh-generator-annprocess作为依赖项,并确保它在运行任何测试之前运行。

于 2014-04-06T06:14:13.487 回答