【发布时间】:2014-01-03 04:13:53
【问题描述】:
所以我的理解是增强的 for 循环应该更慢,因为它们必须使用迭代器。但是我的代码提供了混合的结果。(是的,我知道循环逻辑占用了循环中花费的大部分时间)
对于少量迭代 (100-1000),增强的 for 循环似乎在使用和不使用 JIT 的情况下都快得多。相反,在迭代次数较多(100000000)的情况下,传统的循环要快得多。这是怎么回事?
public class NewMain {
public static void main(String[] args) {
System.out.println("Warming up");
int warmup = 1000000;
for (int i = 0; i < warmup; i++) {
runForLoop();
}
for (int i = 0; i < warmup; i++) {
runEnhancedFor();
}
System.out.println("Running");
int iterations = 100000000;
long start = System.nanoTime();
for (int i = 0; i < iterations; i++) {
runForLoop();
}
System.out.println((System.nanoTime() - start) / iterations + "nS");
start = System.nanoTime();
for (int i = 0; i < iterations; i++) {
runEnhancedFor();
}
System.out.println((System.nanoTime() - start) / iterations + "nS");
}
public static final List<Integer> array = new ArrayList(100);
public static int l;
public static void runForLoop() {
for (int i = 0; i < array.size(); i++) {
l += array.get(i);
}
}
public static void runEnhancedFor() {
for (int i : array) {
l += i;
}
}
}
【问题讨论】:
-
不要使用
System.nanoTime(),它不可靠。 -
为此目的非常可靠。你有什么建议?
-
如果您真的阅读了我的问题,对的人。我的结果与上述问题完全相反。我已经读过了。
标签: java performance loops for-loop