254 字
1 分钟
大循环与小循环嵌套的性能比较(分支预测)

面试被问到一个很有意思的问题:大循环和小循环,哪个在外哪个在里有区别吗?为什么?哪种更快?

当时确实没有答上来也没想到,明明之前看CSAPP了解过CPU的指令分支预测的,但是实在没有想到这里去。

先上个图:

再来个解释的比较清楚的博客:

https://segmentfault.com/a/1190000006889989

简而言之,就是当进行循环时,因为判断循环条件也是属于分支预测,所以大循环在内时,分支预测连续成功的次数会更高,会进行更少的指令回退,CPU执行的会更快。

后面实际测试了一下,下述代码:

long k=0;
final long currentTimeMillis = System.currentTimeMillis();
for (int j = 0; j < 1000000000; j++) {
for (int i = 0; i < 100; i++) {
k++;
}
}
System.out.println(System.currentTimeMillis()-currentTimeMillis);

当大循环在内时,平均执行时间:

avg(2255 2291 2395 2237 2318)=2299.2

当大循环在外时,平均执行时间:

avg(4683 4651 4708 4810 4856)=4741.6

确实慢了1倍多。

大循环与小循环嵌套的性能比较(分支预测)
https://www.intotw.cn/posts/loop-different/
作者
intotw
发布于
2021-03-01
许可协议
CC BY-NC-SA 4.0

分享文章

生成精美分享图或复制链接,与更多人分享本文。

继续阅读

沿着主题读

基于共同的标签与分类

换条路线

从其他文章中稳定抽取

最后更新于 ,距今已过 2038 天

部分内容可能已过时