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

Why does it take so long to start a for loop?

鉴于以下内容(我从一个更大的程序中获取)

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 循环的完整程序,但如果有人知道这可能发生的任何原因,那将节省我创建适当的示例程序(这不是太大)到 post 这里。

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

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

你只设置了 t1 一次,t2 3 次,t3 大约 1000 次。

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

进行比较

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

因此您的数字非常合理,因为第一次比较大约是第二次比较的 2 倍。