我在做一个春季项目。在运行时,它必须执行多个DB操作(在几种方法中)。我想测量项目中某些方法的确切执行时间(在运行时)。
其中一些方法还必须执行DB操作。
现在,当我在这些方法上使用@Benchmark并运行我的项目时,我的项目运行良好。但是JMH会分叉一个新的java进程,并在与执行DB操作相关的点获取NullPointerException。
我知道,在默认情况下,JHM为每次测试(迭代集)分叉一个新的java进程。但是我需要在同一个进程中运行JMH (我正在运行的项目)。
如何在不分叉新的java项目的情况下运行JMH?
简而言之,在我的项目运行时,我试图测量某些方法(涉及DB操作)的确切执行时间。
发布于 2017-04-25 16:31:09
您需要将设置为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的创建者不建议禁用分叉:
所以,在你知道自己在做什么之前,不要把叉子设置为零。
(来源)
https://stackoverflow.com/questions/43609949
复制相似问题