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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

看你怎么寫 if.

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

具體可以看這里:Flattening Arrow Code

這里:

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

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

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

當(dāng)然,如果你的if-else不是出現(xiàn)在循環(huán)里,一般不會(huì)造成太大開銷。

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

回答一下討論區(qū)里的問題。因?yàn)槲乙膊皇亲鯟PU的,就當(dāng)拋磚引玉。希望大家指正!

現(xiàn)代CPU運(yùn)行時(shí)不是一條命令一條命令的執(zhí)行,而是一下讀進(jìn)多條命令,并且對(duì)這些命令進(jìn)行優(yōu)化,生成流水線(pipeline)。優(yōu)化后的流水線的運(yùn)行效率是非常高的。生成流水線也是一個(gè)耗時(shí)的工作。CPU遇到if的條件語句時(shí)根據(jù)分支預(yù)測(cè)器的結(jié)果選擇跳轉(zhuǎn)還是不跳轉(zhuǎn)。并且把相應(yīng)分支里的命令載入生成流水線。CPU同時(shí)還會(huì)并行地執(zhí)行條件語句。如果對(duì)就繼續(xù)執(zhí)行,如果錯(cuò)就把當(dāng)前分支的流水線拋棄然后載入另一個(gè)分支生成流水線。所以如果每次都猜對(duì),程序的運(yùn)行效率就會(huì)基本和沒有if差不多。

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。