每次我试图运行该程序时,都会重复得到以下异常。
虚拟机初始化时出错 无法为对象堆预留足够的空间 无法创建Java虚拟机。
我试图增加我的虚拟内存(页面大小)和RAM大小,但没有效果。
我怎样才能消除这个错误?
每次我试图运行该程序时,都会重复得到以下异常。
虚拟机初始化时出错 无法为对象堆预留足够的空间 无法创建Java虚拟机。
我试图增加我的虚拟内存(页面大小)和RAM大小,但没有效果。
我怎样才能消除这个错误?
当前回答
假设您有足够的空闲内存,并且正确地设置了JVM参数,那么您可能会遇到内存碎片的问题。在Windows XP上检查Java最大内存。
其他回答
这也可能是由于在32位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
这编译得很好。
我在RAM很大但内存上限较低的机器上遇到过这种情况。Java决定分配一个大堆,因为它检测到机器中的ram,但由于ulimit,它不允许分配它。
如果你正在运行一个java程序: -在终端上运行你的程序,使用正确的linux命令:'java -jar myprogram.jar'然后添加-Xms256m - xmx512m,例如:'java -jar myprogram.jar Xms256m - xmx512m '
如果你正在运行一个。sh脚本(linux, mac?)或一个。bat脚本(windows),打开脚本并寻找java选项,如果它们存在并增加内存。
如果以上都不起作用,检查你的进程(windows上的ctrl+alt+delete) (linux/mac上的ps aux),并杀死那些占用分配内存且对你的操作系统不需要的进程!试着重新运行程序。
有时它与
$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2
如果你设置为:
$ sysctl vm.overcommit_memory=0
它应该会起作用。
如果您运行的是32位JVM,那么将堆大小更改为较小可能会有所帮助。你可以通过直接向java传递参数或通过环境变量来做到这一点,
java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"
对于64位JVM,更大的堆大小,如-Xms512M -Xmx1536M应该可以工作。
为Java7运行java -version或java -d32, java——d64来检查您正在运行的版本。