如何在更短的时间内制作 JMH 运行

How to make JMH run in less time

我们有很多 JMH 测试,当 运行 测试(使用 gradle JMH plugin)时,他们需要 时间。我们所有的测试都是单线程的。

谁能建议如何最好地并行执行 JMH 测试?我们的构建盒有大量 CPU 可用。

我们当前配置的 JMH gradle 插件的输出(所有默认值)

# JMH 1.12 ...
# VM options: <none>
# Warmup: 20 iterations, 1 s each
# Measurement: 20 iterations, 1 s each
# Timeout: 10 min per iteration
# Threads: 1 thread, will synchronize iterations
# Benchmark mode: Throughput, ops/time

由于 stability/reproducibility 原因,性能测试不应 运行 并行进行。如果您尝试在同一系统上 运行 JMH 的多个实例,JMH 实际上会抱怨。

您可以做的是 trim 缩短执行时间 如果证明不违反测试稳定性 。例如。如果您知道在 5 秒预热时间后工作负载稳定在某个分数,您可以进行 5x1s 预热迭代。测量同上:如果您知道较少的测量迭代不会影响您得到的错误,那么 trim 也可以降低。与分叉数量相同。

JMH 提供两种注释来覆盖默认的 运行ning 模式(参见例如 JMHSample20_Annotations,以及命令行选项(运行 和 -h 以获得列表)。