日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java的if里有多个if_代码里写很多if会影响效率吗?

發布時間:2023/12/1 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java的if里有多个if_代码里写很多if会影响效率吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

看你怎么寫 if.

嵌入很多層if的代碼叫做“箭頭代碼”,是一個anti-pattern。 這種代碼會增加程序的循環復雜度 (Cyclomatic complexity)

具體可以看這里:Flattening Arrow Code

這里:

總的來說,程序里用if-else是有開銷的。每次condition的判斷就是一個計算,但是if-else的存在增加了程序語言的表達能力,提高了開發效率。

如果純粹從性能的角度看,不用if-else肯定比用好。但是在某些情況下CPU可以做到讓程序性能近似于沒有if-else的情況。stackoverflow上有一個經典問題:Why is it faster to process a sorted array than an unsorted array?

現代CPU在運行到if的時候,不會先判斷condition然后再選擇進入if-else的哪一個分支。它們真正做的是直接進入一個分支執行,如果猜錯則回滾此分支的操作然后換另一個分支執行。如果CPU每次都猜對,就會讓程序性能接近沒有if-else的情形;反之則會造成開銷。那么如何讓CPU猜對呢?如果condition 大部分時間都是true,少部分時間是false,那么CPU 就比較好猜,反之,如果condition的值是一個隨機值,那么CPU每次就得“瞎猜”,猜對的概率就會低了。

當然,如果你的if-else不是出現在循環里,一般不會造成太大開銷。

=============分割線==============================

回答一下討論區里的問題。因為我也不是做CPU的,就當拋磚引玉。希望大家指正!

現代CPU運行時不是一條命令一條命令的執行,而是一下讀進多條命令,并且對這些命令進行優化,生成流水線(pipeline)。優化后的流水線的運行效率是非常高的。生成流水線也是一個耗時的工作。CPU遇到if的條件語句時根據分支預測器的結果選擇跳轉還是不跳轉。并且把相應分支里的命令載入生成流水線。CPU同時還會并行地執行條件語句。如果對就繼續執行,如果錯就把當前分支的流水線拋棄然后載入另一個分支生成流水線。所以如果每次都猜對,程序的運行效率就會基本和沒有if差不多。

總結

以上是生活随笔為你收集整理的java的if里有多个if_代码里写很多if会影响效率吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。