JMH设置和拆除

时间:2016-02-25 09:02:30

标签: 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();

我的兴趣是拥有一个只运行一个的设置方法 “new Runner(opt).run();”在调用所有@Benchmark方法之前(以及它们的迭代)。同样,在所有方法运行之后和返回main之前,只有一次运行的拆卸方法。

当我尝试@setup和@tear down(Level.Trial / Iteration / Invocation)时,这些方法运行了几次,而不仅仅是我希望的那些。 JMH中是否有一种方法可以对方法进行注释,以便它在“运行”之后和运行结束之前立即运行?

谢谢!

1 个答案:

答案 0 :(得分:4)

你遗漏了一些东西:

  1. Forks不是线程,它们是为运行每个基准测试而启动的单独进程。即如果您将分叉设置为5,则任何基准测试(在所选基准集中)将运行5次,每次都在一个单独的VM中。
  2. 除非forks = 0(不推荐基准隔离消失,混合编译配置文件等,主要用于调试)所有基准测试都在不同的进程中运行。所以每个'试验'&#39;给定基准测试的setup / teardown将为该JVM运行一次。没有共享套件&#39;上下文。
  3. 如果你绝对需要一些套装&#39;级别上下文您必须从VM构建它(例如,某些文件在基准设置上读取/在拆卸时更新等。)