In a recent HotSpot VM, the correct response is Integer.MAX_VALUE - 5. Once you go beyond that:
public class Foo {
public static void main(String[] args) {
Object[] array = new Object[Integer.MAX_VALUE - 4];
}
}
You get:
Exception in thread "main" java.lang.OutOfMem