Is this a JVM bug or "expected behavior"?
Solution 1:
Known bug. Related to
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6196102
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6357214
and others.
I think they're considered low-priority to fix because they don't come up in the real world.
Solution 2:
This is bizarre. It certainly looks like a bug somewhere. I get the same results every time with the same code, but trivial changes to the code change the result. For example:
public class Test {
public static void main(String[] args) {
int i;
int count = 0;
for (i = 0; i < Integer.MAX_VALUE; i+=2) {
count++;
}
System.out.println(i);
System.out.println(i < Integer.MAX_VALUE);
}
}
... always prints 2147483640 and true
whereas this:
public class Test {
public static void main(String[] args) {
int i;
for (i = 0; i < Integer.MAX_VALUE; i+=2) {
}
System.out.println(i);
System.out.println(i < Integer.MAX_VALUE);
}
}
always prints -2147483648 and true.
Very, very weird.
(That's running an OpenJDK 1.6 VM on Linux.)
EDIT: Running OpenJDK 1.7 on Windows 7, I don't see the problem:
java version "1.7.0-ea"
Java(TM) SE Runtime Environment (build 1.7.0-ea-b78)
Java HotSpot(TM) Client VM (build 17.0-b05, mixed mode, sharing)