为什么启动一个 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 倍。
鉴于以下内容(我从一个更大的程序中获取)
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 倍。