【发布时间】:2020-04-11 04:16:05
【问题描述】:
我跑了这段代码:(外循环运行100次,内循环运行10亿次。)
long l = 0;
for(int i = 0; i < 100; i++)
for(int j = 0; j < 1000000000; j++)
l++;
System.out.println(l);
我运行它大约需要 11-12 秒。
然后我运行了这段代码:
long l = 0;
int i = 0, j = 0;
for(; i < 100; i++)
for(; j < 1000000000; j++)
l++;
System.out.println(l);
每当我运行它时,这大约需要 100 毫秒(0.1 秒)。
有人知道为什么会有很大的不同吗?我的理论是,对于 'i' 的每个值,内部 for 循环必须再次初始化 j,这使它有更多的操作要做,所以它需要更长的时间是有道理的。然而,差异是巨大的(大约 100 倍),并且在其他类似的测试中,不会发生同样的事情。
如果你想自己看,我是这样计时的:
class Main {
static long start, end;
public static void main(String[] args) {
start();
long l = 0;
int i = 0, j = 0;
for(; i < 100; i++)
for(; j < 1000000000; j++)
l++;
System.out.println(l);
end();
print();
}
public static void start() {
start = System.currentTimeMillis();
}
public static void end() {
end = System.currentTimeMillis();
}
public static void print() {
System.out.println((end - start) + " ms.");
}
}
【问题讨论】:
-
您可以从
l的值检查迭代。第二个函数会少 100 倍。 -
与您的问题并不真正相关,但由于您正在尝试执行所谓的基准测试,您知道Java Microbenchmarking Harness 吗?