量子物理学的Java

时间:2015-11-04 09:20:16

标签: java performance caching memory cpu

今天我遇到了一个引人入胜的幻灯片here。它比较了下面给出的两个循环。

第一

for (int i=0; i<n; i++) {
    a[i] * = 3;
}

第二

for (int i=0; i<n; i+=16) {
    a[i] * = 3;
}

如果第一个循环需要8ms,那么第二个循环应该只花1ms,至少这是我的预期。但幻灯片的结论不同。任何人都可以解释为什么我的代码可能会像这样?

1 个答案:

答案 0 :(得分:2)

blog post详细解释了这一现象。基本上:

  • 第一个循环比第二个循环多做6倍
  • 但他们在相同的时间(大致)
  • 运行

原因是第一个循环具有更好的缓存局部性,从而减少了缓存未命中。有关SO的主题有很多问题,例如: