【发布时间】:2016-05-29 19:34:13
【问题描述】:
我编写了以下代码来将一维数组转换为二维数组。每当我将它用于小尺寸数组时,它都可以正常工作,每当数组变得太大时,代码都会引发java.lang.OutOfMemoryError: Java heap space 异常。
byte[][] twoD = new byte[(int)Math.ceil(xlArray.length / (double)4096)][4096];
这只是 IDE 中导致的问题,因为它无法访问机器上足够的堆空间还是更多?
【问题讨论】:
-
xlArray 长度可以有的最大值是多少?哪个IDE? java 7 还是 java 8?
-
这与JVM有关。因为所有内存都是在 Java 中为您管理的,所以它确保您只能使用这么多内存。运行程序时,您可以指定希望堆的大小,但限制实际上取决于平台(如this person 询问)。
-
我认为没有理由认为问题出在异常指示之外:堆中没有足够的可用空间来分配所有请求的对象。如果您在 IDE 中运行它,那么适当的解决方案取决于 IDE 详细信息。您也许可以指定程序应该在更大的堆上运行;您可能需要增加 IDE 自己的堆;或者您可能需要更好的 IDE。
-
This post 也解决了这个问题。 oracle 中的默认堆大小为 64M(请参阅official documentation)。
-
我在 IDEA IntelliJ 上使用 java8。试图找到堆的设置并更新你
标签: java arrays heap-memory