參考地點。 http://en.wikipedia.org/wiki/Locality_of_reference。 所以它像迭代一個小的int數組會更快,然後迭代linkedList。 由於陣列是連續的,並且所有陣列都可以放入cpu緩存中,並且緩存未命中會更少。易變陣列和參考地點
但我想要一個簡單的int數組和易失性數組之間的比較。 AFAIK在易失性數組上迭代會導致每次都進行易失性讀取,這可能會在某些系統中導致在每次讀取時更新緩存。
int[] arr; // assume here i have declared and initialized it.
int sum = 0;
for(int i=0;i<arr.length;i++){
sum = sum + arr[i];
}
揮發性計數器部分
volatile int[] arr; // assume here i have declared and initialized it.
int sum = 0;
for(int i=0;i<arr.length;i++){
sum = sum + arr[i]; // volatile read everytime
}
所以他們會是相同或編譯器就可以把所有的揮發性讀入一個單一的揮發性讀取(編譯優化)
你試過比較生成的字節碼嗎?當詢問(非JIT)編譯器優化時,這通常是一個很好的起點。 –
我對你想做什麼感到困惑。 'int arr;'不初始化數組。此外,這個正確的代碼:'volatile int [] arr = new int [len];'不會用volatile元素初始化一個數組。只有對數組的volatile參考。 http://jeremymanson.blogspot.com/2009/06/volatile-arrays-in-java.html – Radiodef
嗨yahh我知道..我說假設他們初始化那裏..不想寫代碼:)。其次,我知道它是一個volatile引用數組,因此每次你執行arr [i]時它都是一個volatile變量,因爲它首先讀取數組和相應的位置 – veritas