每次尝试运行程序时,我都会反复出现以下异常。
VM初始化期间发生错误
无法为对象堆保留足够的空间
无法创建Java虚拟机。
我试图增加我的虚拟内存(页面大小)和RAM大小,但无济于事。任何人都可以告诉我如何消除此错误?
使用-XX:MaxHeapSize=512m
(或任何需要的大数字)运行JVM(或简称为-Xmx512m
)
有时,此错误表示服务器上的物理内存和交换实际上已充分利用!
我最近在运行带有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的新实例将启动正常,我能够运行我的应用程序。
(显然,对我来说,这只是一个临时解决方案;我仍然有一项出色的任务是对该机器上运行的进程进行更彻底的检查,看看是否可以采取措施降低标称内存利用率水平,不得不求助于停止申请。)
对于错误,“在vm初始化期间发生的错误无法为对象堆jboss保留足够的空间”
我有类似的问题。我在64位机器上安装了32位版本的Java。
通过卸载该版本并安装64位版本的Java。我能够解决这个问题。
我最近遇到了这个问题。我有3个java应用程序,以1024m或1280m堆大小开始。 Java正在查看swap中的可用空间,如果没有足够的可用内存,jvm将退出。
为了解决这个问题,我不得不结束几个分配了大量虚拟内存的程序。
我使用64位jvm在x86-64 linux上运行。
假设您有足够的可用内存并且正确设置了JVM参数,则可能存在内存碎片问题。检查Java maximum memory on Windows XP。
如果您正在运行32位JVM,那么将堆大小更改为更小可能会有所帮助。您可以通过直接将args传递给java或通过以下环境变量来执行此操作,
java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"
对于64位JVM,像-Xms512M -Xmx1536M
这样更大的堆大小应该可以工作。
运行qazxsw poi或qazxsw poi,qazxsw poi for Java 7来检查你正在运行的版本。
我有适量的内存设置,但对我来说它是使用64位intellij与32位jvm。一旦我切换到64位VM,错误就消失了。
无论如何,这是如何解决它:转到开始 - >控制面板 - >系统 - >高级(选项卡) - >环境变量 - >系统变量 - >新建:变量名称:_JAVA_OPTIONS变量值:-Xmx512M
要么
更改蚂蚁电话,如下所示。
java -version
它对我有用。
VM初始化期间发生错误无法为1572864KB对象堆保留足够的空间
我在settings.grade文件1536中将内存值更改为512并且它有所帮助
如果您正在运行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)并终止使用内存分配的进程,这对您的操作系统来说不是必需的! =>尝试重新运行您的程序。
这也可能是因为在32位HotSpot vm上设置了太大的东西,例如:
-Xms1536m -Xmx1536m
这可能/将起作用:
-Xms1336m -Xmx1336m
在CASSANDRA_HOME / bin / cassandra.bat中,您会找到以下配置
java -d32
你可以将2G减少到一些较小的数字,例如1G甚至更小,它应该工作。
如果您在unix框上运行,请相应地更改.sh文件。
我得到了同样的错误,当我使用%temp%删除临时文件并重新启动eclipse时它得到了解决。
转到开始 - >控制面板 - >系统 - >高级(选项卡) - >环境变量 - >系统变量 - >新建:
java--d64
有时它涉及到
<exec
**<arg value="-J-Xmx512m" />**
</exec>
如果您将其设置为:
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**^
它应该工作。
将Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M
替换为$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2
或cassandra bin目录中cassandra.bat文件中的任何更大内存大小。
无需像在下面那样只更改POM文件
$ sysctl vm.overcommit_memory=0
我在使用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但具有较低内存ulimits的计算机上,这种情况发生在我身上。 Java决定分配一个大堆,因为它检测到机器中的ram,但由于ulimits不允许分配它。
这是如何解决它:
_JAVA_OPTIONS
变量值:-Xmx512M
变量名称:Path
变量值:%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;
将其更改为适当的路径。
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
我知道这里已有很多答案,但没有一个对我有帮助。最后我打开文件/etc/elasticsearch/jvm.options
并更改:
-Xms2G
-Xmx2G
至
-Xms256M
-Xmx256M
这解决了我。希望这可以帮助其他人。
假设你的类在包Test
中被称为mypackage
。像这样运行你的代码:
java -Xmx1024m mypackage.Test
这将为您的代码保留1024 MB的堆空间。如果你想要512 MB,你可以使用:
java -Xmx512m mypackage.Test
在1024m
,512m
等中使用小米