首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMH设置和拆卸

JMH设置和拆卸
EN

Stack Overflow用户
提问于 2016-02-25 09:02:29
回答 1查看 2.2K关注 0票数 0

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

代码语言:javascript
复制
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();

我感兴趣的是:

  1. 一个只运行一个的安装方法--就在new Runner(opt).run();之后和所有@Benchmark方法被调用之前(以及它们的迭代)。
  2. 同样,在所有方法运行之后,在我们返回main之前,只运行一次的下拉方法。

当我尝试@setup@tear_down (在Level支持下:Level)时,这些方法运行了几次,而不仅仅是我想要的方法。JMH中是否有一种对方法进行注释的方法,以便它只运行那些方法--就在run()之后,就在run()结束之前?

EN

回答 1

Stack Overflow用户

发布于 2016-02-28 18:38:13

你错过了几件事:

  1. 分叉不是线程,它们是为运行每个基准测试而启动的单独进程。也就是说,如果您将分叉设置为5,则任何基准(在所选基准集中)都将运行5次,每次运行在一个单独的VM中。
  2. 除非forks=0 (不推荐作为基准测试隔离,混合编译概要文件等,主要用于调试)所有的基准测试都在单独的进程中运行。因此,对于给定的基准测试,每个“试用”设置/删除都将为该JVM运行一次。没有共享的“套房”背景。

如果您绝对需要一些“Suite”级别的上下文,则必须使用VM构建它(例如,一些在基准测试设置上读取的文件/在teardown上更新等)。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35622625

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档