有一个错误,即 JMH 没有选择我的类(class)进行基准测试。

package com.stecurran.jmh.entry;

import org.openjdk.jmh.Main;

public class JmhRunner {

    private static final String TEST = "com.stecurra.benchmark.strategy.EventRunner";

    public static void main(String[] args) {

        Main.main(getArguments(TEST, 5, 5000, 1));
    }

    private static String[] getArguments(String className, int nRuns, int runForMilliseconds, int nThreads) {
        return new String[] { className, "-i", "" + nRuns, "-r", runForMilliseconds + "ms", "-t", "" + nThreads, "-w", "5000ms", "-wi", "3", "-v" };
    }

}

其中 EventRunner 包含:
    package com.stecurra.benchmark.strategy;

import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.GenerateMicroBenchmark;
import org.openjdk.jmh.annotations.Mode;



@BenchmarkMode(Mode.AverageTime)
public class EventRunner {

    @GenerateMicroBenchmark
    public void runTest(){

        TimeStore.start = System.nanoTime();


        // FacebookRetriever fbCal = FacebookRetriever.getInstance();
        GoogleRetriever gCal = GoogleRetriever.getInstance();

        CalendarService cs = new CalendarService(gCal);

        for (SimpleEvent simpleEvent : cs.getEvents()) {
            System.out.println(simpleEvent);
        }

        TimeStore.end = System.nanoTime();

        System.out.println(TimeStore.getTime());

    }

}

我得到这个错误:

排除:org.sample.MyBenchmark.testMethod,与 com.stecurra.benchmark.strategy.EventRunner 不匹配
没有匹配的基准。拼写错误的正则表达式?使用 -v 进行详细输出。

如何将我的正则表达式更改为有效?

谢谢

最佳答案

确保您实际编译了项目,让 JMH 注释处理器运行并为您生成基准测试列表。从您收到的消息来看,很明显 EventRunner.test 没有进入基准测试列表。

当我们在做的时候,还有其他花絮:

  • 劫持 JMH Main 可能是运行基准测试的简单方法,但我们有更好的 Java API 用于此类用例。
  • 测量时间,尤其是打印 @GenerateMicroBenchmark 方法内部的时间可能不是您想要的。相反,您需要让 JMH 为您进行计时测量。见例如relevant JMH sample
  • 消除打印输出后,您需要将获得的值输入黑洞 this the relevant JMH sample
  • 关于java - JMH 不上课以进行基准测试,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20506974/

    10-12 01:15