java内存不足,Error occurred during initialization of VM

在本地启动应用的时候程序报错:

1
2
Error occurred during initialization of VM
Could not reserve enough space for 2097152KB object heap

很明显这个说的是“在初始化虚拟机的时候发生了错误,无法预留2097152KB的堆内存空间”。问题是我的内存还剩很多,再分配2g也完全够了。

内存空余

同样的问题只发生在我的身上,在同事上运行同样的程序完全没有问题。这让我不禁怀疑到可能是我的环境问题。于是抱着一丝希望,使用了“重启”大法。

没想到!还是不行,呵呵。

后来再网上搜索到,只有windows才有这个问题。jvm会要求分配一段连续的内存,不连续的内存就不要,如果windows提供不了的话,就会爆这个错。但是我重启之后,马上运行java程序也不行,那可能就不是这个原因。

再搜索了一下后,发现别人说如果使用的是32位的jdk,那么最多可以使用的内存是1.8GB。官方推荐的32位使用1.5GB就好了。而我启动的java程序中加了-Xmx2048m -Xms2048m这个参数。

所以最后的解决方案是:将jdk切换成64位的就好了。

如何判断自己的jdk是否为64位呢?在控制台中执行一下命令,如果没报错,就是64位。

1
java -d64 -version

备注:该检测方法只适用于jdk1.7或者jdk1.8。

原文链接:https://www.jdkdownload.com/jdk_lack_of_memory.html