为什么启动for循环需要这么长时间?

时间:2015-06-06 07:25:44

标签: java loops for-loop time

鉴于以下内容(我从较大的计划中获取)

t1 = System.currentTimeMillis();
for (int i = 0; i < 3; i++) {
    t2 = System.currentTimeMillis();
    for (int j = i; j <= 1000; j += 3) {
        t3 = System.currentTimeMillis();
        //j loop body
    }  
}

当我运行程序并测试速度时,我发现

t2 - t1约为2700毫秒

t3 - t2约为1300毫秒

相比之下,以下程序会向控制台输出3毫秒的时间

public class Sum {
    public static void main(String[] args) {
        int sum = 0;
        long t1 = System.currentTimeMillis();
        for (int k = 0; k < 1000000; k++) {
            sum += k;
        }
        System.out.println(System.currentTimeMillis() - t1);
        System.out.println(sum);
    }
}

如何简单地输入i和j for循环需要花费很多时间?

我很欣赏我没有展示i和j循环的完整程序,但是如果有人知道为什么会发生这种情况,那么这将节省我创建一个合适的示例程序(不是&#39) ;太大了)在这里发帖。

2 个答案:

答案 0 :(得分:1)

您只设置t1一次,t2设置3次,t3设置约1000次。

您将t1与上次设置t2进行比较。 您将上次设置t2与上次设置t3的时间进行比较。

第一次比较显示内部循环的前两次迭代的组合运行时。 第二个比较显示了内部循环3(== last)迭代的运行时。

因此,你的数字非常有意义,因为第一次比较大约是第二次比较的2倍。

答案 1 :(得分:-1)

System.currentTimeMillis的();花费很长时间更快的代码不会在for循环中调用函数

任何类型的函数调用对于cpu来说都比简单的语句或算术运算更多的工作