多次读取同一个索引时,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]
在循环中被读取两次。假设array[i]
没有在循环中重新分配,是否允许 JVM 假设它array[i]
没有改变并因此只读取它的值一次?由于array
是传入的可变对象,因此可以想象它在第一次和第二次读取之间发生了变化。
我查看了生成的字节码,它确实读array[i]
了两次(daload
)。JVM 是否允许将其优化为一次读取?