每次我试图运行该程序时,都会重复得到以下异常。

虚拟机初始化时出错 无法为对象堆预留足够的空间 无法创建Java虚拟机。

我试图增加我的虚拟内存(页面大小)和RAM大小,但没有效果。

我怎样才能消除这个错误?


当前回答

32位Java需要内存中连续的空闲空间才能运行。如果指定较大的堆大小,则内存中可能没有那么多连续的空闲空间,即使可用的空闲空间比必需的大得多。

在这些情况下,安装64位版本的Java会有所帮助,因为连续内存要求只适用于32位Java。

其他回答

结合-Xmx512M使用-d64确保您运行的是64位虚拟机。在64位的机器上,我以为我运行的是64位的虚拟机,但不是。在安装64位Java之后,-d64选项可以工作,-Xmx允许更大的内存大小。

java -d64 -Xmx512M mypackage.Test

这也可能是由于在32位HotSpot vm上设置过大而导致的,例如:

-Xms1536m -Xmx1536m

这可能/将会工作的地方:

-Xms1336m -Xmx1336m

有时它与

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

如果你设置为:

$ sysctl vm.overcommit_memory=0

它应该会起作用。

我也有类似的问题。我在一台64位机器上安装了32位版本的Java。

通过卸载该版本并安装64位版本的Java。我解决了这个问题。

错误:

对于“初始化vm时发生错误,无法为对象堆jboss预留足够的空间”的错误。

根本原因:

JVM内存分配不当/不足,如下所述。 例如,jboss-eap-6.2\bin\standalone.conf中的JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m"或jboss-eap-6.2\bin\standalone.conf.bat中的"JAVA_OPTS=-Xms1G -Xmx1G -XX:MaxPermSize=256m",这只是JVM内存分配池参数。

解决方法:

Increase the heap size. To increase the heap size, goto -> jboss-eap-6.2\bin\standalone.conf.bat or jboss-eap-6.2\bin\standalone.conf change ->JAVA_OPTS="-Xms256m -Xmx512m -XX:MaxPermSize=256m" where -Xms is Minimum heap size and -Xmx is Maximum heap size. Usually its not recommanded to have same size for min and max. If you are running your application from eclipse, Double click on the server select 'open launch configuration' you will be redirected to the window 'Edit launch configuration properties'. In this windown goto the tab '(x)=Arguments'. In VM Arguments, define your heap size as mentioned below "-Dprogram.name=JBossTools: JBoss EAP 6.1+ Runtime Server" -server -Xms256m -Xmx512m -XX:MaxPermSize=256m -Dorg.jboss.resolver.warning=true