JMH 设置和拆除

Tal*_*liG 0 jmh

我创建了一个类。在那个类中,我有几个方法被标记为@Benchmark. 我还有一个运行 JMH 基准测试的主要方法:

System.out.println("NUMBER OF THREADS: "+numOfThreads);
Options opt = new OptionsBuilder()
        .include(JMHtopToBottom.class.getSimpleName())
        .warmupIterations(5)
        .measurementIterations(3)
        .forks(numOfThreads)
        .build();

Collection<RunResult> collection = new Runner(opt).run();
Run Code Online (Sandbox Code Playgroud)

我的兴趣是:

  1. 只运行一个的设置方法-new Runner(opt).run();在所有@Benchmark方法被调用之后和之前(以及它们的迭代)。

  2. 同样,有一个拆卸方法,在所有方法运行之后和我们回到主之前只运行一次。

当我试图@setup@tear_down(与Level支持:Trial/ Iteration/ Invocation)的方法运行几次,不仅是我希望的。JMH 中是否有一种方法可以注释方法,以便它只运行方法 - 在结束之后run()和之前run()

Nit*_*art 5

你缺少一些东西:

  1. Fork 不是线程,它们是为运行每个基准测试而启动的独立进程。即,如果您将 fork 设置为 5,则任何基准测试(在所选基准测试集中)将运行 5 次,每次都在单独的 VM 中。
  2. 除非 forks=0(不推荐,因为基准隔离已经消失,混合编译配置文件等,主要用于调试)所有基准都在单独的进程中运行。因此,针对给定基准测试的每个“试用”设置/拆卸都将为该 JVM 运行一次。没有共享的“套件”上下文。

如果您绝对需要一些“套件”级别的上下文,则必须从 VM 中构建它(例如,在基准设置时读取/在拆卸时更新的某些文件等)。