我正在通過遞增/遞減運算符和我遇到過,如果我運行遞減形式的循環,在這種情況下,它將以增量形式運行得比同樣的循環更快。我期待這兩個步驟都會持續相同的時間,因爲同樣的步驟將會被遵循。我通過網絡搜索,但無法找到令人信服的答案。是否由於遞減運算符比增量運算符需要更少的時間?爲什麼遞減循環比遞增循環運行得更快?
for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
我正在通過遞增/遞減運算符和我遇到過,如果我運行遞減形式的循環,在這種情況下,它將以增量形式運行得比同樣的循環更快。我期待這兩個步驟都會持續相同的時間,因爲同樣的步驟將會被遵循。我通過網絡搜索,但無法找到令人信服的答案。是否由於遞減運算符比增量運算符需要更少的時間?爲什麼遞減循環比遞增循環運行得更快?
for(int i = 100000; i > 0; i--) {}
for(int i = 1; i < 100001; i++) {}
這是因爲在字節碼中與0進行比較與用非零數進行比較是不同的操作。其實i < 10001
要求首先加載堆棧上的數字然後執行比較,而i > 0
作爲一個操作執行。當然,由於JVM優化,在大多數情況下不會有速度差異。但是我們可以嘗試使用-Xint選項運行代碼(僅解釋模式執行)。
的Piyush巴德瓦傑
我在網上編譯器檢測了兩個圈,但我的增量循環執行速度更快,然後遞減循環。
程序執行取決於許多因素。有時我們在同一臺機器上運行相同的程序很多次,我們得到不同的執行時間。所以這取決於很多因素。
查看結果
for(int i = 1; i < 100001; i++) {
}
增量環 - http://ideone.com/irdY0e
for(int i = 100000; i > 0; i--) {
}
遞減循環 - http://ideone.com/yDO9Jf
爵士葉夫根尼·Dorofeev給出了一個專家只能給的優秀解釋。
最後,您需要考慮CPU的性能。在考慮基準來確定Java應用程序的整體性能時,請記住字節碼執行,本機代碼執行和圖形各自發揮作用。它們的影響取決於具體應用的性質。
你的資源是什麼? – alfasin 2013-05-10 06:04:20
很久以前,i> 0的測試比非null值的測試略快,但我嚴重懷疑這種優化仍然相關。 – 2013-05-10 06:04:52
看到存在的問題和答案: http://stackoverflow.com/questions/8968785/which-loop-has-better-performance-increment-or-decrement/8968842#8968842 – 2013-05-10 06:07:26