在Intellij IDEA中运行JMH样本时的空基准

时间:2014-04-05 17:12:10

标签: java intellij-idea jmh

我在使用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()为false,因此benchmarks为空。然后我在样本jar文件中看到了MicroBenchmarks文件,其中包含有关测试的信息并且工作正常。

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

1 个答案:

答案 0 :(得分:3)

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

  

“确保在获得支持之前尝试过这些内容:    - Archetypes提供黄金版本配置。尝试生成干净的JMH基准测试项目并移植基准测试   那里。升级到较新的JMH时尝试这一点非常重要   版本,因为构建配置的微小差异可能   归因于你所看到的失败。“

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