【发布时间】:2013-10-30 06:56:07
【问题描述】:
参考位置 .http://en.wikipedia.org/wiki/Locality_of_reference。 所以它就像迭代一个小的int数组会比迭代一个linkedList更快。 因为数组是连续的,并且所有数组都可以放入 cpu 缓存中 会减少缓存未命中。
但我想要一个简单的 int 数组和一个 volatile 数组之间的比较。 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 元素初始化数组。只有对数组的可变引用。 jeremymanson.blogspot.com/2009/06/volatile-arrays-in-java.html -
嗨,我知道..我说假设他们在那里初始化..不想写代码:)。其次,我知道它是对数组的易失性引用,因此每次执行此操作时它都是易失性的原因 arr[i] .. 因为它首先读取数组和相应的位置
标签: java multithreading concurrency volatile cpu-cache