Der folgende CodeWarum ist es, dass der Code unten anders in Java verhält 1.6 und 1.7
public class Test16Jit {
public static void main(String[] s) {
int max = Integer.MAX_VALUE;
int i = 0;
long li = 0;
while (i >= 0) {
i++;
li++;
if (i > max) {
System.out.println("i is : " + i);
System.out.println("max is : " + max);
System.out.println("Woo!! something really went wrong");
}
}
System.out.println("Value of i: " + i);
System.out.println("Total # of iterations: " + li);
}
}
Ausgänge unten in Java 1.7x
Value of i: -2147483648
Total # of iterations: 2147483648
Ausgänge unten in Java 1.6x
i is : 2147483636
max is : 2147483647
Woo!! something really went wrong
Value of i: -2147483648
Total # of iterations: 2147483648
Gibt es einen Grund für dieses Verhalten?
Auch wenn ich ändere
int max = Integer.MAX_VALUE; -> final int max = Integer.MAX_VALUE;
Es in 1.6x genau gleiche verhält und 1.7x
Erhalten Sie einen Unterschied im Verhalten vom einfacheren Code 'int max = Integer.MAX_VALUE; int i = 2147483636; System.out.println (i> max); '? –
@AndyTurner Ich habe nicht getestet, aber ich vermute, das soll ein JIT-Bug sein. – shmosel
Das druckt falsch @AndyTurner –