阅读 49

Could not reserve enough space for object heap问题如何解决?| Java Debug 笔记

本文正在参加「Java主题月 - Java Debug笔记活动」,详情查看<活动链接>

Could not reserve enough space for object heap问题如何解决?

每次尝试运行程序时,都会重复出现以下异常

Error occurred during initialization of VM

Could not reserve enough space for object heap

Could not create the Java virtual machine.
复制代码

我试图增加我的虚拟内存和RAM大小,但没有效果。

如何消除此错误?

回答一

这也可能是由于在32-bit HotSpot vm上设置了太大的内容造成的,例如:

-Xms1536m -Xmx1536m
复制代码

写入这个以后也许能正常工作

-Xms1336m -Xmx1336m
复制代码

回答二

我在使用javac的时候遇到了这个问题,而且它在命令行选项上似乎不起作用

-bash-3.2$ javac -Xmx256M HelloWorldApp.java 
Error occurred during initialization of VM
Could not reserve enough space for object heap
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
复制代码

所以解决办法就是设置_JAVA_OPTIONS

-bash-3.2$ export _JAVA_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.java 
Picked up _JAVA_OPTIONS: -Xmx256M
复制代码

这下编译就正常了

这种情况大多发生在内存不足的机器上。Java决定分配一个大堆,因为它检测到机器中的ram,但是由于ulimits,它无法分。

回答三

有时,此错误表示服务器上的物理内存已被完全使用!

我最近在运行Enterprise Linux 5.7 with 48 GB of RAM的服务器上看到了这个问题。我发现即使只是运行:

java -version
复制代码

导致了相同的错误,从而确定问题不是由于我的应用程序。

运行如下命令

cat /proc/meminfo
复制代码

报告指出,MemFreeSwapFree值分别低于MenTotalSwapTotal的值。

MemTotal:     49300620 kB
MemFree:        146376 kB
...
SwapTotal:     4192956 kB
SwapFree:         1364 kB
复制代码

停止机器上运行的其它应用可以增加可运行内存容量。

MemTotal:     49300620 kB
MemFree:       2908664 kB
...
SwapTotal:     4192956 kB
SwapFree:      1016052 kB
复制代码

此时,一个新的Java实例将正常启动,我可以运行我的应用程序。

(显然,对我来说,这只是暂时的解决办法;我还有一项任务要做,那就是更彻底地检查运行在那台机器上的进程,看看是否有什么方法可以降低内存利用率,而不必停止应用程序。)

文章翻译自Stack Overflow:stackoverflow.com/questions/4…

文章分类
后端
文章标签