每次尝试运行程序时,我都会反复收到以下异常。
VM 初始化期间发生错误无法为对象堆保留足够的空间无法创建 Java 虚拟机。
我试图增加我的虚拟内存(页面大小)和 RAM 大小,但无济于事。
我怎样才能消除这个错误?
使用 -XX:MaxHeapSize=512m
(或您需要的任何大数字)(或简称为 -Xmx512m
)运行 JVM
这也可能是由于在 32 位 HotSpot 虚拟机上设置过大而导致的,例如:
-Xms1536m -Xmx1536m
这可能/会起作用的地方:
-Xms1336m -Xmx1336m
这是解决方法:
转到开始->控制面板->系统->高级(选项卡)->环境变量->系统变量->新建:变量名:_JAVA_OPTIONS 变量值:-Xmx512M 变量名:路径变量值:%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 但内存 ulimit 较低的机器上。 Java 决定分配一个大堆,因为它检测到机器中的 ram,但由于 ulimit,它不允许分配它。
32 位 Java 需要内存中连续的可用空间才能运行。如果您指定较大的堆大小,那么即使您有比必要更多的可用空间,内存中也可能没有那么多连续的可用空间。
在这些情况下,安装 64 位版本的 Java 会有所帮助,连续内存要求仅适用于 32 位 Java。
结合 -Xmx512M 使用 -d64 以确保您运行的是 64 位 VM。在 64 位机器上,我确信我正在运行 64 位虚拟机,但没有。安装 64 位 Java 后,-d64 选项有效,-Xmx 允许更大的内存大小。
java -d64 -Xmx512M mypackage.Test
在 android 文件夹中打开 gradle.properties 文件。
替换这一行:
org.gradle.jvmargs=-Xmx1536M
和:
org.gradle.jvmargs=-Xmx512m
说明:来自 Gradle 文档的最大限制:
如果请求的构建环境未指定最大堆大小,则守护程序将使用最多 512MB 的堆。
我遇到了同样的错误,并通过在 run.conf.bat 中配置它来解决这个问题
在 Jboss5x 中使用配置 run.conf.bat 运行 JVM
如果您在语句中传递的空闲内存不可用,那么请在 run.conf.bat 中进行更改
set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m"
我有类似的问题。我在 64 位机器上安装了 32 位版本的 Java。
通过卸载该版本并安装 64 位版本的 Java。我能够解决这个问题。
我知道这里已经有很多答案,但没有一个对我有帮助。最后我打开文件 /etc/elasticsearch/jvm.options
并更改:
-Xms2G
-Xmx2G
至
-Xms256M
-Xmx256M
这为我解决了它。希望这可以帮助这里的其他人。
假设您的类在包 mypackage
中称为 Test
。像这样运行您的代码:
java -Xmx1024m mypackage.Test
这将为您的代码保留 1024 MB 的堆空间。如果你想要 512 MB,你可以使用:
java -Xmx512m mypackage.Test
在 1024m
、512m
等中使用小 m
有时,此错误表明服务器上的物理内存和交换空间实际上已被充分利用!
我最近在运行 RedHat Enterprise Linux 5.7 和 48 GB RAM 的服务器上看到了这个问题。我发现即使只是跑步
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, appdynamics for me] :|
错误 :
对于错误,“vm 初始化期间发生错误无法为对象堆 jboss 保留足够的空间”
根本原因 :
如下所述,我们的 JVM 内存分配不正确/不足。
例如 jboss-eap-6.2\bin\standalone.conf 中的 JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m" 或 jboss-eap-6.2\bin 中的 "JAVA_OPTS=-Xms1G -Xmx1G -XX:MaxPermSize=256M" \standalone.conf.bat 只不过是 JVM 内存分配池参数。
解析度 :
增加堆大小。为了增加堆大小,
转到 -> jboss-eap-6.2\bin\standalone.conf.bat 或 jboss-eap-6.2\bin\standalone.conf
更改 ->JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=256m" 其中 -Xms 是最小堆大小,-Xmx 是最大堆大小。
通常不建议最小和最大尺寸相同。
如果您从 Eclipse 运行您的应用程序,
双击服务器
选择“打开启动配置”,您将被重定向到“编辑启动配置属性”窗口。
在此窗口中,转到选项卡“(x)=参数”。
在 VM Arguments 中,定义您的堆大小,如下所述
"-Dprogram.name=JBossTools: JBoss EAP 6.1+ 运行时服务器" -server -Xms256m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true
java -Xgcprio:throughput -Xmx:64m -Xms:64m myApp
”
我最近遇到了这个问题。我有 3 个以 1024m 或 1280m 堆大小开头的 java 应用程序。 Java正在查看swap中的可用空间,如果没有足够的可用内存,jvm就会退出。
为了解决这个问题,我不得不结束几个分配了大量虚拟内存的程序。
我在带有 64 位 jvm 的 x86-64 linux 上运行。
我有适量的内存设置,但对我来说,它使用的是 64 位 intellij 和 32 位 jvm。一旦我切换到 64 位 VM,错误就消失了。
如果您正在运行 32 位 JVM,将堆大小更改为更小可能会有所帮助。您可以通过直接将 args 传递给 java 或通过如下环境变量来执行此操作,
java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"
对于 64 位 JVM,较大的堆大小(如 -Xms512M -Xmx1536M
)应该可以工作。
对 Java7 运行 java -version
或 java -d32
、java--d64
以检查您正在运行的版本。
无论如何,这里是如何修复它:转到开始->控制面板->系统->高级(选项卡)->环境变量->系统变量->新建:变量名:_JAVA_OPTIONS变量值:-Xmx512M
或者
如下所示更改 ant 调用。
<exec
**<arg value="-J-Xmx512m" />**
</exec>
它对我有用。
初始化 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 文件。
我遇到了同样的错误,当我使用 %temp% 删除临时文件并重新启动 Eclipse 时,它得到了解决。
有时它涉及到
$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2
如果您将其设置为:
$ sysctl vm.overcommit_memory=0
它应该工作。
将 cassandra bin 目录中 cassandra.bat 文件中的 -Xmx2G
替换为 -Xms512M
或任何更大的内存大小。
就我而言,我无法将 gradle.properties
中的 org.gradle.jvmargs=-Xmx...
增加到 1GB 以上。它不起作用,因为我的机器上安装了两个 Java,一个是 32 位的(Gradle 正在使用这个),另一个是 64 位的。我通过添加指向 64 位 Java 的 JAVA_HOME
环境变量解决了这个问题。
无需做任何事情,只需在 POM 文件中进行更改,如下所示
<configuration>
<maxmemory>1024M</maxmemory>
</configuration>
不定期副业成功案例分享