请参见以下代码段:
Long first_begin = System.currentTimeMillis();
// first nested loops
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 1000000; j++) {
// do some stuff
}
}
System.out.println(System.currentTimeMillis() - first_begin);
// second nested loops
Long seconde_begin = System.currentTimeMillis();
for (int i = 0; i < 1000000; i++) {
for (int j = 0; j < 10; j++) {
// do some stuff
}
}
System.out.println(System.currentTimeMillis() - seconde_begin);
我想知道为什么第一个嵌套循环的运行速度比第二个慢?
问候!
重要说明! :很抱歉,当我第一次提出此问题时,我无意中使变量j以1开头,我已进行了更正。
更新:循环中没有任何特定的逻辑,我只是在做一些测试,实际上这是在面试中提出的一个问题,面试官提示我更改循环的顺序以获得更好的性能。顺便说一句,我正在使用JDK1.5。经过一些测试之后,我现在更加困惑了,因为程序的结果不一致-有时第一个循环的运行速度比第二个循环快,但是大多数时候它的运行速度比第二个循环慢。
最佳答案
这个答案是针对更新后的问题的:
int[][]
,则内部循环中值较大的数组应该较慢。数量不多,但仍然如此。为了稍微理解该问题,请在Joel的一篇博客文章中阅读有关Shlemiel the street painter的信息。 Long
对象而不是long
原语只是愚蠢的,JVM最有可能通过将其替换为原语来优化它,如果可以的话,如果不能,则注定会有一些(尽管非常小)恒定的速度降低使用它。 关于nested-loops - 嵌套循环的效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2550827/