【发布时间】:2016-02-04 17:10:05
【问题描述】:
今天我看到了一张引人入胜的幻灯片here。它比较下面给出的两个 for 循环。
第一
for (int i=0; i<n; i++) {
a[i] * = 3;
}
第二
for (int i=0; i<n; i+=16) {
a[i] * = 3;
}
如果第一个循环需要 8 毫秒,那么第二个循环应该只需要 1 毫秒,至少这是我的预期。但幻灯片的结论不同。谁能解释为什么我的代码可能会这样?
【问题讨论】:
-
这可能是一个有趣的实验,但两个循环做的事情不同,所以你无法真正比较它们......
-
比较做不同事情的两段代码的速度是错误的,因此你会被否决。
-
实际上幻灯片上说两者同时运行(您可能预计第一个会慢 16 倍)。
-
@RBz 正如 Eran 所解释的,第二个循环做的工作更少,所以你会期望它在更短的时间内运行 - 你说第一个循环需要 8 毫秒,而第二个循环需要 1 毫秒,所以没有什么令人惊讶的那里。但是您链接的演示文稿说两个循环同时运行。所以我不确定你指的是哪张幻灯片,但你的问题似乎与令人困惑的演示文稿不符......
标签: java performance caching memory cpu