首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Caliper:解释基准测试结果

Caliper:解释基准测试结果
EN

Stack Overflow用户
提问于 2012-09-22 22:03:43
回答 1查看 499关注 0票数 3

有人能帮我回答这个问题吗?我用单一方法编写了简单的基准测试

代码语言:javascript
复制
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和get result:

代码语言:javascript
复制
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.41 56579.97 553782.25)到底是什么意思。

0%方案方法timeIntArrayBlockingQueue被调用10次,参数长度= 100。

(timeIntArrayBlockingQueue(100) - 10倍)

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

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

EN

回答 1

Stack Overflow用户

发布于 2012-09-23 05:46:56

百分比只是进度,也就是说,之后没有什么有趣的东西。

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

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

σ=311.51 ns就是Standard deviation。绝对错误,如果σ/measured_time接近1,你就可以确定出了什么问题。

benchmark=IntArrayBlockingQueue,length=100

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

重要的部分

不要让你的timeXXX方法返回任何东西,而是计算并返回一些结果,这样你就可以确定不会优化整个计算过程。方法的主体应该是这样的

代码语言:javascript
复制
...
while ((value = queue.poll()) != 101) {
    result += value;
}

单一的加法加上Integer.getValue()很难让它变得更慢。它确实有点,但基准测试以这种方式变得更现实(您使用轮询值,不是吗)。通常,您希望运行多个基准测试并比较它们的结果,以便选择最快的变体(实际上,通常您不需要任何基准测试)。

你的循环很奇怪,不管怎么说,队列中通常只有一个元素…

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12544426

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档