无法为对象堆保留足够的空间来启动JVM

时间:2011-07-10 16:12:35

标签: java linux memory jvm

刚遇到奇怪的问题。当我输入

java -version

我得到了

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.

java -Xms64m -Xmx64m -version

此命令正常

java version "1.6.0_24"
Java(TM) SE Runtime Environment (build 1.6.0_24-b07)
Java HotSpot(TM) Client VM (build 19.1-b02, mixed mode)

如果我将xms,xmx更改为128m,我会再次收到错误。

使用top命令和free -m我可以看到,我有超过192 MB的空闲时间,为什么我仍然会收到此错误?

Mem:    262144k total,    64760k used,   197384k free,        0k buffers
Swap:        0k total,        0k used,        0k free,        0k cached

谢谢

3 个答案:

答案 0 :(得分:14)

在64位环境中使用32位版本的java时遇到了同样的问题。在64 OS中使用64位java时没关系。

答案 1 :(得分:11)

看起来你试图运行它的机器只有256 MB内存。

也许JVM尝试分配64 MB内存的大型连续块。你有空的192 MB可能被分成小块,因此没有64 MB的连续块可以自由分配。

尝试使用较小的堆大小启动Java程序,例如:

java -Xms16m ...

答案 2 :(得分:5)

根据this post,此错误消息表示:

  

堆大小比计算机的物理内存大。

编辑:我想,堆不是唯一保留的内存。至少还有像PermGenSpace这样的其他JVM设置要求内存。堆大小为128M,PermGenSpace为64M,您已经填充了可用空间。

为什么不缩小其他内存设置以释放堆空间?