同じインデックスを複数回読み取る場合、JVMは配列の読み取りを最適化できますか?次のことを考慮してください。
public static void foo(int[] array) {
for (int i=0; i<array.length; i++) {
int value1 = array[i];
...
int value2 = array[i];
...
}
...
}
array[i]
ループ内で2回読み取られます。ループ内で再割り当てされていないと仮定するarray[i]
と、JVMarray[i]
は変更されていないと仮定して、その値を1回だけ読み取ることができますか?array
は渡された可変オブジェクトであるため、1回目の読み取りと2回目の読み取りの間で変更された可能性があります。
生成されたバイトコードを確認しましたが、実際には2回読み取られますarray[i]
(daload
)。JVMはこれを1つの読み取りに最適化することを許可されていますか?