当我运行hypergraph构建应用程序时,我得到了这个异常
java.lang.OutOfMemoryError: Java heap space
我使用ubuntu 12.04异常发生前几分钟free -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
我注意到交换没有被充分利用可以利用它来避免此异常
java虚拟机有一些限制,您可以在启动java命令时增加堆栈和堆限制。
显然你必须传递像
这样的东西java -Xmx6g myprogram
其中6g应该将堆限制为6 GiB
增加Java中的堆大小
OutOfMemory错误可能由于多种原因而发生(例如,由于程序中的内存泄漏导致堆耗尽,您的程序需要更多内存来运行,本机内存耗尽等)。找出OutOfMemory的原因的最好方法是让JVM在进入OutOfMemory时生成一个堆转储。你可以使用-XX:+HeapDumpOnOutOfMemoryError选项来实现。
生成堆转储后,可以使用eclipse内存分析器分析堆。
http://www.eclipse.org/mat/分析将确定您是否有内存泄漏或您的程序是否真的需要额外的内存。如果需要额外的内存,可以使用-Xmx选项进行配置。
默认限制是主内存的1/4。如果你提高你的最大值,你可以使用更多。
你应该注意:
- 为JVM应用程序使用交换空间是一个非常糟糕的主意,因为GC会杀死你的进程,如果不是你的机器的话。
- 买更多内存可能值得考虑,你可以花300美元买64 GB。