我想写性能测试使用jmh来测量我的应用程序的代码的一些部分。我已阅读jmh samples关于如何编写测试,并在YouTube上观看关于jmh和性能测试的一些会谈。如何选择jmh配置参数
我不明白的是如何为@Warmup
,@Measurement
和@Fork
值选择正确的值。在大多数样本中,它是1叉,10次迭代,持续时间为1秒。
我明白,配置没有银弹,但我应该怎样选择我应该选择的值?
我想写性能测试使用jmh来测量我的应用程序的代码的一些部分。我已阅读jmh samples关于如何编写测试,并在YouTube上观看关于jmh和性能测试的一些会谈。如何选择jmh配置参数
我不明白的是如何为@Warmup
,@Measurement
和@Fork
值选择正确的值。在大多数样本中,它是1叉,10次迭代,持续时间为1秒。
我明白,配置没有银弹,但我应该怎样选择我应该选择的值?
我不知道是否有人可以推荐实际上尽可能接近你的参数 - 甚至可能不是写这个工具的人。这是用不同的参数非常具体到您正在测试使用的情况下,操作系统的JVM等
我个人做了几次,每次拍摄的结果,这样我可以分析它。你有一些错误+/-(至少平均时间)字段,这是我的第一个迹象。如果它太大(这是你会确定的),我通常会增加@Warmup
和@Measurement
;这不是一个黄金法则,但这是我所做的。下面是一个示例使用:
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
@State(Scope.Thread)
我可能会增加iterations
和time
一点一点地看,如果我得到接近与以前的运行不断取得成果。
我通常在相同的热身下运行所有的基准,所以结果不会偏颇。
到这里的事情是,你可能会得到好的或坏的结果,或者缓慢和快速 - 但那只是输出,不是原因。了解原因并运行jmh
根据perfasm
或xperfasm
和许多其他分析器,是一个完全不同的厨房,出我的联盟的方式...