我讀過一些JVM可以通過刪除邊界檢查來優化代碼執行。我想弄清楚的是編碼技術會更好地工作。Java邊界檢查優化示例
在方法下面例1將在JVM以往數字出來,並消除邊界的源[指數]參考的檢查?
是example2更好的代碼練習?這似乎是這樣,但在循環內的一些算法中,索引超出範圍是正常情況。所以你不想在這個循環中產生大量的Exception對象。
public void example1(int [] source, int index) {
if (index >= 0 && index < source.length)
System.out.println("Value is " + source[index]);
else
System.out.println("Out of range: " + index);
}
public void example2(int [] source, int index) {
try {
System.out.println("Value is " + source[index]);
} catch (IndexOutOfBoundsException exp) {
System.out.println("Out of range: " + index);
}
}
這些代碼段只是代表性的。我知道在這些例子中,邊界檢查對於性能而言並不重要。不過,我正在研究嵌入式協議應用程序,其中冗餘邊界檢查將會加起來。
[This](http://www.ssw.uni-linz.ac.at/Research/Papers/Wuerthinger07/Wuerthinger07.pdf)這裏的一些同事的論文應該對你很有意思。我認爲這些變化已被納入熱點,但不確定。無論如何,從性能和編碼實踐的角度來看,第二個例子肯定更糟糕。 – Voo
@AlanObject,邊界檢查是多個數量級,比調用輸出要小。在大多數情況下,它沒有任何區別。 –