每次尝试运行该程序时,我都会反复收到以下异常。
VM初始化期间发生错误
无法为对象堆保留足够的空间
无法创建Java虚拟机。
我试图增加虚拟内存(页面大小)和RAM大小,但无济于事。
如何消除此错误?
每次尝试运行该程序时,我都会反复收到以下异常。
VM初始化期间发生错误
无法为对象堆保留足够的空间
无法创建Java虚拟机。
我试图增加虚拟内存(页面大小)和RAM大小,但无济于事。
如何消除此错误?
Answers:
使用JVM -XX:MaxHeapSize=512m
(或任意数量)(或-Xmx512m
简称)运行JVM
这也可能是由于在32位HotSpot虚拟机上设置的值过大而引起的,例如:
-Xms1536m -Xmx1536m
这可能/将在哪里工作:
-Xms1336m -Xmx1336m
解决方法如下:
转到开始->控制面板->系统->高级(选项卡)->环境变量->系统
变量->新增:变量名称:_JAVA_OPTIONS
变量值:-Xmx512M
变量名称:Path
变量值:%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;
将此更改为您合适的路径。
我在使用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,但是由于ulimits的原因,它不允许分配它。
32位Java需要内存中连续的可用空间才能运行。如果您指定较大的堆大小,则即使您的可用空间比必要的多得多,内存中也可能没有太多的连续可用空间。
在这些情况下,安装64位版本的Java会有所帮助,连续内存要求仅适用于32位Java。
与-Xmx512M结合使用,请使用-d64以确保您正在运行64位VM。我确定在64位计算机上运行的是64位虚拟机,但没有。安装64位Java后,-d64选项有效,-Xmx允许更大的内存大小。
java -d64 -Xmx512M mypackage.Test
我遇到了相同的错误,并通过在run.conf.bat中对其进行配置解决了该问题
在Jboss5x中使用配置run.conf.bat运行JVM
如果没有可用内存,请在run.conf.bat中进行更改。
set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"
我有类似的问题。我已经在64位计算机上安装了32位Java版本。
通过卸载该版本并安装Java的64位版本。我能够解决问题。
有时,此错误表明服务器上的物理内存和交换实际上已被充分利用!
我最近在运行具有48 GB RAM的RedHat Enterprise Linux 5.7的服务器上看到此问题。我发现即使只是跑步
java -version
导致了同样的错误,这表明问题并非特定于我的应用程序。
跑步
cat /proc/meminfo
报告说,MemFree和SwapFree分别远低于MemTotal和SwapTotal值的1%:
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实例,并且我能够运行我的应用程序。
(显然,对我来说,这只是一个临时解决方案;我仍然有一项出色的任务,需要更彻底地检查该计算机上运行的进程,以查看是否可以采取一些措施来降低名义内存利用率水平,而无需不得不停止应用程序。)
java -version
失败了,即使top仍然显示了一些空闲:| (也说VM初始化期间发生错误,有时无法为卡标记阵列保留足够的空间)。修复似乎是在运行,寻找哪些进程使用了最多的RAM(VIRT列),杀死它们[postgres,对我来说是应用程序动力学]:|
对于错误, “ vm初始化期间发生无法为对象堆jboss保留足够的空间”
如下所述,对我们的JVM的内存分配不正确/不足。
例如: - JAVA_OPTS = “MaxPermSize参数=256米Xms1303m -Xmx1303m -XX”在JBoss中-EAP-6.2 \ BIN \ standalone.conf或: “MaxPermSize参数= 256M JAVA_OPTS = -Xms1G -Xmx1G -XX”在JBoss中-EAP-6.2 \ bin中\ standalone.conf.bat就是JVM内存分配池参数。
通常不建议最小和最大大小相同。
如果您是从eclipse运行应用程序,
java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp
”
假设您有足够的可用内存,并且正确设置了JVM参数,则可能存在内存碎片问题。在Windows XP上检查Java最大内存。
VM初始化期间发生错误,无法为1572864KB对象堆保留足够的空间
我将settings.grade文件中的内存值从1536更改为512,它有所帮助
转到“开始”->“控制面板”->“系统”->“高级(选项卡)”->“环境变量”->“系统变量”->“新建”:
Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M
如果您正在运行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),并杀死使用内存分配的进程,这些进程对于您的操作系统不是必需的!=>尝试重新运行您的程序。
在CASSANDRA_HOME / bin / cassandra.bat中,您将找到以下配置
REM JVM Opts we'll use in legacy run or installation
set JAVA_OPTS=-ea^
-javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^
-Xms**2G**^
-Xmx**2G**^
您可以将2G减少到较小的数量,例如1G或更小,它应该可以工作。
如果在Unix框上运行,则相同,请在.sh文件中进行适当更改。
只需更改POM文件中的内容,无需进行任何操作,如下所示
<configuration>
<maxmemory>1024M</maxmemory>
</configuration>