我想使用jmh编写性能测试,以测量应用程序代码的某些部分。我已阅读jmh samples有关如何编写测试的信息,并观看了YouTube上有关jmh和性能测试的一些讨论。

我不明白的是如何为@Warmup@Measurement@Fork值选择正确的值。在大多数样本中,它是1个Fork,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)

我可能会一点一点地增加iterationstime,以查看是否与以前的运行接近恒定的结果。

我通常在相同的预热下运行所有​​基准测试,因此结果不会对此产生偏见。

到达这里的事情是,您可能会得到好或坏的结果,或者缓慢而快速-但这仅仅是输出,而不是原因。了解原因并在jmhperfasm和许多其他探查器下运行xperfasm是一个完全不同的厨房,与我的联盟脱颖而出...

10-08 08:53