【发布时间】:2018-01-20 19:35:25
【问题描述】:
我很惊讶为什么在我的机器上,数组的最大大小是 Integer.MAX_VALUE/7
我知道数组是由整数索引的,因此数组大小不能大于 Integer.MAX_VALUE。我还阅读了一些 stackoverflow 讨论,其中我发现它在 JVM 上有所不同,并且 JVM 使用了一些(5-8 位)。
在这种情况下,最大值也应为Integer.MAX_VALUE-8。
Integer.MAX_VALUE-2 和 Integer.MAX_VALUE/7 之间的任何值都会给我错误:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
int[] arr = new int[Integer.MAX_VALUE/7];
这是我可以分配给我机器上数组的最大值。有具体原因吗?
更新: 我正在从 Eclipse 运行代码,其中默认堆大小为 1024Mb。以下是我的环境中的更多详细信息:
System.out.println(Runtime.getRuntime().totalMemory()/(1024*3));
System.out.println(Runtime.getRuntime().freeMemory()/(1024*3));
System.out.println(Runtime.getRuntime().maxMemory()/(1024*3));
给出输出:
40618
40195
594773
【问题讨论】:
-
您的最大堆大小设置为多少?
-
@OliverCharlesworth 更新了详细信息。
-
@cloudwalker 我已经在我的问题中提到了该链接。只有当我发现该链接没有帮助时,我才开始创建一个新问题。
-
亲爱的投反对票的人,如果有人能解释我的反对意见,我会感到非常安慰!!!!