【问题标题】:Not enough heap space when creating array [duplicate]创建数组时没有足够的堆空间[重复]
【发布时间】: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


【解决方案1】:

调用java时使用:

  • -Xms 指定初始 Java 堆大小。
  • -Xmx 最大 Java 堆大小。(默认大小为 128mb)。

看这里:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/java.html

如果您使用的是 netbeans、eclipse 等 ide,您可以找到 Run Configurations options -> Arguments -> VM Arguments 并设置 Xmx 和(或)Xms。


How can I increase the JVM memory?

【讨论】:

  • 你在哪里找到堆的 128mb 默认大小?我查看了Oracle documentation 并找到了 64m。变了吗?
  • 也许它已经被改变了。但它是 128mb。
【解决方案2】:

IDE(任何 IDE)通常会产生一个具有自己的内存设置的子进程。您通常可以在某种配置文件中配置它们。

例如在 Eclipse 中选择菜单“运行”->“运行配置”。在“Java 应用程序”配置中,转到“参数”选项卡。

你可以在里面设置虚拟机参数。查看 Java Non-Standard Options 了解有关内存管理的信息。

【讨论】:

    猜你喜欢
    • 2019-01-21
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-05
    相关资源
    最近更新 更多