在JMH(Java Microbenchmark Harness)中,我们可以使用
@BenchmarkMode(Mode.AverageTime)
@Warmup(iterations = 10)
@Measurement(iterations = 10)
评估 JVM 预热后执行的平均时间。
我们也可以使用
@BenchmarkMode(Mode.SingleShotTime)
@Measurement(iterations = 1)
估计执行的冷启动时间。但这仅执行一次基准测试,这可能会引入偏差。那么JMH有没有什么方法来评估冷启动的平均时间呢?
根据阿列克谢本人 http://mail.openjdk.java.net/pipermail/jmh-dev/2014-May/000807.html(虽然从 2014 年开始):
单次基准测试最初注定要运行单个
多个分叉上的测量迭代——要估计的场景
“冷”的表现。但在许多情况下,您可能需要更多测量
那里的迭代特别是如果你只运行一个分叉,
因为会产生更多的样本。
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class AverageSingleShot {
public static void main(String[] args) throws Exception {
Options opt = new OptionsBuilder()
.include(AverageSingleShot.class.getSimpleName())
.build();
new Runner(opt).run();
}
@Fork(100)
@Benchmark
@BenchmarkMode(Mode.SingleShotTime)
public int test() {
return ThreadLocalRandom.current().nextInt() + ThreadLocalRandom.current().nextInt();
}
}
除了这个事实之外,这会告诉你average(看到那个100
):
Benchmark Mode Cnt Score Error Units
AverageSingleShot.test ss 100 41173.540 ± 2871.546 ns/op
你也会得到Percentiles
and a Histogram
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)