多次讀取同一個索引時,JVM能夠優化數組讀取嗎?考慮以下內容: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
是一個傳入的可變對象,它可能會在第一次和第二次讀取之間發生變化。
我查看了生成的字節碼,它確實讀取了兩次(daload
)array[i]
。 JVM是否允許將其優化爲一次讀取?
我們可以假設您在詢問HotSpot VM嗎? – 2013-02-26 23:24:07
這真的是一個關於Java內存模型的問題。 JVM供應商無關緊要。實際上它將是Sun的Hotspot JVM。 – 2013-02-26 23:28:34