1

当我运行我的 hyprgraph 构造应用程序时,我得到了这个异常

    java.lang.OutOfMemoryError: Java heap space

我使用 ubuntu 12.04free -m异常前几分钟的命令输出是:

noura@noura-Inspiron-N5050:~$ free -m
         total       used       free     shared    buffers     cached
Mem:          3939       2672       1266          0         80        610
-/+ buffers/cache:       1981       1957
Swap:         7328         65       7263

我注意到交换使用的不够充分可以利用它来避免此异常

4

3 回答 3

3

java虚拟机有一些限制,你可以在启动java命令时增加堆栈和堆限制。

显然你必须通过类似的东西

java -Xmx6g myprogram

其中 6g 应该将您的堆限制为 6 GiB

在 Java 中增加堆大小

于 2013-04-28T15:06:57.573 回答
1

OutOfMemory 错误可能由于多种原因而发生(例如,由于程序中的内存泄漏导致堆耗尽,您的程序需要更多内存才能运行,本机内存耗尽等)。找出 OutOfMemory 原因的最佳方法是让 JVM 在 OutOfMemory 发生时生成 heapdump。您可以使用 -XX:+HeapDumpOnOutOfMemoryError 选项来实现。

生成堆转储后,您可以使用 eclipse 内存分析器来分析堆。

http://www.eclipse.org/mat/

分析确定您是否有内存泄漏或您的程序确实需要额外的内存。如果需要额外的内存,您可以使用 -Xmx 选项进行配置。

于 2013-04-28T15:32:57.960 回答
0

默认限制是主内存的 1/4。如果你增加你的最大值,你可以使用更多。

你应该注意:

  • 为 JVM 应用程序使用交换空间是一个非常糟糕的主意,因为如果不是您的机器,GC 会杀死您的进程。
  • 购买更多内存可能值得考虑,您可以花 300 美元购买 64 GB。

顺便说一句,我为我 8 岁的儿子买了一台他自己建造的电脑。;) 它的价格为 240 英镑,内存为 8 GB。

于 2013-04-28T17:10:03.197 回答