我正在做一个春季项目。它必须在运行时执行几个DB操作(在几种方法中)。我想测量项目中某些方法的确切执行时间(运行时)。
其中一些方法也必须执行数据库操作。
现在,当我在这些方法上运行@Benchmark并运行我的项目时,我的项目运行良好。但是JMH会分配一个新的java进程并在与执行数据库操作相关的那些点上获取NullPointerException。
我知道,默认情况下,JHM为每个试验(迭代集)分配一个新的java进程。但是我需要在同一个进程(我运行的项目)中运行JMH。
如何在不提供新Java项目的情况下运行JMH?
简而言之,我正在尝试在项目运行时测量某些方法(涉及数据库操作)的确切执行时间。
答案 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)