首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种方法可以运行JMH而不分叉一个新的java进程?

有没有一种方法可以运行JMH而不分叉一个新的java进程?
EN

Stack Overflow用户
提问于 2017-04-25 11:53:22
回答 1查看 1K关注 0票数 2

我在做一个春季项目。在运行时,它必须执行多个DB操作(在几种方法中)。我想测量项目中某些方法的确切执行时间(在运行时)。

其中一些方法还必须执行DB操作。

现在,当我在这些方法上使用@Benchmark并运行我的项目时,我的项目运行良好。但是JMH会分叉一个新的java进程,并在与执行DB操作相关的点获取NullPointerException。

我知道,在默认情况下,JHM为每次测试(迭代集)分叉一个新的java进程。但是我需要在同一个进程中运行JMH (我正在运行的项目)。

如何在不分叉新的java项目的情况下运行JMH?

简而言之,在我的项目运行时,我试图测量某些方法(涉及DB操作)的确切执行时间。

EN

回答 1

Stack Overflow用户

发布于 2017-04-25 16:31:09

您需要将设置为0

这样做的方法有很多:

对类的注释:

代码语言:javascript
复制
@Fork(0)
public class YourTestClass { //...

或对特定基准的注释(如果只适用于一个基准)

代码语言:javascript
复制
@Benchmark
@Fork(0)
public void yourTest()

或者通过在main中设置选项(适用于整个运行):

代码语言:javascript
复制
public static void main(String[] args) throws RunnerException {
    Options opt = new OptionsBuilder()
            .forks(0)
            // other arguments come here
            .build();

    new Runner(opt).run();
}

或者通过命令行参数(也适用于整个运行):

代码语言:javascript
复制
java -jar yourbenchmark.jar -f 0 

注意,如果基准测试的精度很重要,JMH的创建者不建议禁用分叉:

所以,在你知道自己在做什么之前,不要把叉子设置为零。

(来源)

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

https://stackoverflow.com/questions/43609949

复制
相关文章

相似问题

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