そこにあるJVMのいくつかは、境界チェックを削除することでコードの実行を最適化できることを読みました。私が理解しようとしているのは、どのコーディング手法がより効果的に機能するかということです。
以下のメソッドexample1では、JVMはそれを理解し、 source [index]参照の境界チェックを排除しますか?
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);
}
}
これらのコードフラグメントは、単なる表現です。これらの例では、境界チェックがパフォーマンスにほとんど影響しないことを認識しています。ただし、冗長境界チェックが追加される組み込みプロトコルアプリケーションに取り組んでいます。