gpt4 book ai didi

java - Caliper:解释基准测试结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:54 27 4
gpt4 key购买 nike

谁能帮我解答这个问题。我用单一方法编写简单的基准测试

public void timeIntArrayBlockingQueue(int reps) {
for (int i = 0; i < reps; i++) {
for (int j = 0; j < length; j++)
queue.add(data[j]);
Integer value;
while ((value = queue.poll()) != 101) {}
}
}

对于ArrayBlockingQueue并得到结果:

0% Scenario{vm=java, trial=0, benchmark=IntArrayBlockingQueue, length=100} 5480.41 ns; σ=311.51 ns @ 10 trials

33% Scenario{vm=java, trial=0, benchmark=IntArrayBlockingQueue, length=1000} 56579.97 ns; σ=5530.23 ns @ 10 trials

67% Scenario{vm=java, trial=0, benchmark=IntArrayBlockingQueue, length=10000} 553782.25 ns; σ=27212.56 ns @ 10 trials

length us linear runtime
100 5.48 =
1000 56.58 ===
10000 553.78 ==============================

vm: java
trial: 0
benchmark: IntArrayBlockingQueue

这些数字 (5480.41ns 56579.97ns 553782.25ns) 的确切含义。

0% 场景方法 timeIntArrayBlockingQueue 被调用 10 次,参数长度 = 100。
(timeIntArrayBlockingQueue(100) - 10 次)

33% 场景方法 timeIntArrayBlockingQueue 被调用 10 次,参数长度 = 1000。 (timeIntArrayBlockingQueue(1000) - 10 次)..

如何解释这个基准测试的结果?

最佳答案

百分比只是进度,即之后没有什么有趣的。

What this digits (5480.41ns 56579.97ns 553782.25ns) mean exactly.

这是单次迭代的平均持续时间,即 timeXXX 的持续时间除以 rep

σ=311.51 nsStandard deviation .某种绝对误差,如果 σ/measured_time 接近于 1,则可以确定有问题。

benchmark=IntArrayBlockingQueue, length=100

基准测试的名称是给定的参数,例如通过 @Param


重要部分

不要让您的 timeXXX 方法不返回任何内容,而是计算并返回一些结果,这样您就可以确定没有优化整个计算。你方法的主体应该是这样的

...
while ((value = queue.poll()) != 101) {
result += value;
}

Integer.getValue() 一起进行的单个加法几乎不会使其变慢。它做了一点,但基准测试通过这种方式变得更加现实(你使用轮询值,不是吗)。通常您想要运行多个基准测试并比较它们的结果,以便您可以选择最快的变体(实际上,通常您不需要任何基准测试)。

你的循环很奇怪,反正队列中通常只有一个元素......

关于java - Caliper:解释基准测试结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12544426/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com