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

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

当时确实没有答上来也没想到,明明之前看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倍多。

版权声明:除特殊说明,博客文章均为intotw原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇