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

use*_*512 21 java linux memory jvm

刚遇到奇怪的问题.当我打字

java -version
Run Code Online (Sandbox Code Playgroud)

我有

Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
Run Code Online (Sandbox Code Playgroud)

.

java -Xms64m -Xmx64m -version
Run Code Online (Sandbox Code Playgroud)

这个命令工作正常

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)
Run Code Online (Sandbox Code Playgroud)

如果我将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
Run Code Online (Sandbox Code Playgroud)

谢谢

Yam*_*ada 14

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


Jes*_*per 11

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

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

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

java -Xms16m ...
Run Code Online (Sandbox Code Playgroud)


mic*_*ico 5

根据这篇文章,此错误消息表示:

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

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

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