【发布时间】:2017-07-21 19:19:55
【问题描述】:
int steps = 256 * 1024 * 1024;
int[] a = new int[2];
// Loop 1
for (int i=0; i<steps; i++) { a[0]++; a[0]++; }
// Loop 2
for (int i=0; i<steps; i++) { a[0]++; a[1]++; }
谁能解释为什么第二个循环比第一个慢 20 倍(19 毫秒 vs 232 毫秒)?
我就是这样计时的:
long start_time = System.currentTimeMillis();
// Loop
long end_time = System.currentTimeMillis();
System.out.println(end_time - start_time);
【问题讨论】:
-
看看字节码,第一个可能已经完全优化了
-
如果您在完整的 MVCE 中提供您的时序代码会有所帮助。
-
其实我只是对它进行了计时(System.currentTimeMillis() 在每个循环之前、之间和之后),并大致了解了他们做了什么。
-
你计时了多少次?您应该至少进行 10.000 次迭代,以确保获得准确的数字
-
计时 20 次,每次迭代的两次计时几乎完全相同
标签: java algorithm performance