有没有办法运行JMH而不需要新的java进程?

时间:2017-04-25 11:53:22

标签: spring spring-boot microbenchmark jmh

我正在做一个春季项目。它必须在运行时执行几个DB操作(在几种方法中)。我想测量项目中某些方法的确切执行时间(运行时)。
其中一些方法也必须执行数据库操作。
现在,当我在这些方法上运行@Benchmark并运行我的项目时,我的项目运行良好。但是JMH会分配一个新的java进程并在与执行数据库操作相关的那些点上获取NullPointerException。

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

如何在不提供新Java项目的情况下运行JMH?
简而言之,我正在尝试在项目运行时测量某些方法(涉及数据库操作)的确切执行时间。

1 个答案:

答案 0 :(得分:2)

您需要将fork设置为0

有很多方法可以做到:

课堂注释:

@Fork(0)
public class YourTestClass { //...

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

@Benchmark
@Fork(0)
public void yourTest()

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

public static void main(String[] args) throws RunnerException {
    Options opt = new OptionsBuilder()
            .forks(0)
            // other arguments come here
            .build();

    new Runner(opt).run();
}

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

java -jar yourbenchmark.jar -f 0 

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

  

因此,在知道自己在做什么之前,不要将分叉设置为零。

source