在DKSRathore的问题中How to simulate the Out Of memory : Requested array size exceeds VM limit创建阵列时出现了一些奇怪的现象。尝试创建不同大小的阵列时Java OutOfMemoryError消息发生更改
创建大小为Integer.MAX_VALUE的数组时,抛出了一个异常,并且出现了错误java.lang.OutOfMemoryError Requested array size exceeds VM limit
。
但是,如果创建的数组大小小于最大值但仍在虚拟机内存上限,则会将错误消息读取为java.lang.OutOfMemoryError: Java heap space
。
进一步测试我设法缩小了错误消息更改的位置。
long[] l = new long[2147483645];
例外信息读取“请求的阵列大小超过VM限制”
long[] l = new long[2147483644];
例外信息读取“Java堆空间错误”
我增加了我的虚拟机的内存,并且仍然产生的相同的结果。
有没有人知道为什么会发生这种情况?
一些额外的信息:
Integer.MAX_VALUE = 2147483647
编辑:这是我用来查找值的代码,可能会有所帮助:
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;
}
}
}
该死的你......现在我正在寻找找出原因!奇数(MAX_VALUE - 3) – TofuBeer 2009-12-10 15:24:58
我试图为此找到一个这里的龙标签! – Gordon 2009-12-10 16:23:46
你传入了什么VM参数?只有-Xms和-Xmx? – 2009-12-10 16:47:07