In the question by DKSRathore How to simulate the Out Of memory : Requested array size exceeds VM limit some odd behavior was noted when creating an arrays.
When creating an array of size Integer.MAX_VALUE an exception with the error java.lang.OutOfMemoryError Requested array size exceeds VM limit
was thrown.
However when an array was created with a size less than the max but still above the virtual machine memory limit the error message read java.lang.OutOfMemoryError: Java heap space
.
Testing further I managed to narrow down where the error messages changes.
long[] l = new long[2147483645];
The exceptions message reads "Requested array size exceeds VM limit"
long[] l = new long[2147483644];
The exceptions message reads "Java heap space errors"
I increased my virtual machine memory and still produced the same result.
Has anyone any idea why this happens?
Some extra info:
Integer.MAX_VALUE = 2147483647
Edit: Here's the code I used to find the value, might be helpful:
int max = Integer.MAX_VALUE;
boolean done = false;
while (!done) {
try {
max--;
// Throws an error
long[] l = new long[max];
// Exit if an error is no longer thrown
done = true;
} catch (OutOfMemoryError e) {
if (!e.getMessage().contains("Requested array size exceeds VM limit")) {
System.out.println("Message changes at " + max);
done = true;
}
}
}