私の友人と私は困惑しています。これら 2 つのコード ブロックで、最初の内側のループが 2 番目の内側のループよりも速いのはなぜですか? これはある種の JVM 最適化ですか?
public class Test {
public static void main(String[] args) {
int[] arr = new int[100000000];
arr[99999999] = 1;
long t1, t2, t3;
for (int ndx = 0; ndx < 10; ndx++) {
t1 = System.currentTimeMillis();
for (int i = 0; i < arr.length; i++)
if (0 < arr[i])
System.out.print("");
t2 = System.currentTimeMillis();
for (int i = 0; i < arr.length; i++)
if (arr[i] > 0)
System.out.print("");
t3 = System.currentTimeMillis();
System.out.println(t2 - t1 +" "+(t3 - t2));
}
}
}
そして結果:
me@myhost ~ $ java Test
57 80
154 211
150 209
149 209
150 209
150 209
151 209
150 210
150 210
149 209
不等式の順序を入れ替えました:
public class Test {
public static void main(String[] args) {
int[] arr = new int[100000000];
arr[99999999] = 1;
long t1, t2, t3;
for (int ndx = 0; ndx < 10; ndx++) {
t1 = System.currentTimeMillis();
for (int i = 0; i < arr.length; i++)
if (arr[i] > 0)
System.out.print("");
t2 = System.currentTimeMillis();
for (int i = 0; i < arr.length; i++)
if (0 < arr[i])
System.out.print("");
t3 = System.currentTimeMillis();
System.out.println((t2 - t1) +" "+(t3 - t2));
}
}
}
そして結果:
me@myhost ~ $ java Test
56 80
155 210
150 209
149 209
151 210
149 209
150 209
149 208
149 209
149 208
狂気:同じことを何度も繰り返して、異なる結果を得ること。