我遇到了带有两个for循环的简单java程序。问题是这些for循环是否需要相同的时间来执行,或者首先执行的速度会比第二个更快。
以下是程序:
public static void main(String[] args) {
Long t1 = System.currentTimeMillis();
for (int i = 999; i > 0; i--) {
System.out.println(i);
}
t1 = System.currentTimeMillis() - t1;
Long t2 = System.currentTimeMillis();
for (int j = 0; j < 999; j++) {
System.out.println(j);
}
t2 = System.currentTimeMillis() - t2;
System.out.println("for loop1 time : " + t1);
System.out.println("for loop2 time : " + t2);
}
执行此操作后,我发现第一个for循环比第二个花费更多时间。但是在交换位置之后,结果与先前写入的循环相比总是花费比另一个更多的时间。我对结果感到非常惊讶。请有人告诉我上述程序是如何运作的。
答案 0 :(得分:13)
任一循环所花费的时间将由I / O(即打印到屏幕)支配,这是高度可变的。我不认为你可以从你的例子中学到很多东西。
答案 1 :(得分:6)
第一个循环将在内存中分配1000个字符串,而第二个循环,无论是否向前工作,都可以使用已经预先分配的对象。
虽然使用System.out.println
,但任何分配应该可以忽略不计。
答案 2 :(得分:2)
Long(和其他原始包装器)具有值-128 ... 127的缓存(look here for LongCache class)。它在第一次循环运行时填充。
答案 3 :(得分:1)
我认为,如果你要做一个真正的基准测试,你应该在不同的线程中运行它们并使用更高的值(不仅仅是1000),没有IO(在执行时间内打印输出),而不是按顺序运行它们,但一个接一个。 我有一次执行相同代码的经验可能需要不同的执行时间。 在我看来,两种测试都不会有所不同。