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

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

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

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


当前回答

假设你的类在包mypackage中叫做Test。像这样运行代码:

java -Xmx1024m mypackage.Test

这将为您的代码保留1024mb的堆空间。如果你想要512 MB,你可以使用:

java -Xmx512m mypackage.Test

在1024m, 512m等单位使用小m

其他回答

在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文件。

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

-Xms1536m -Xmx1536m

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

-Xms1336m -Xmx1336m

假设你的类在包mypackage中叫做Test。像这样运行代码:

java -Xmx1024m mypackage.Test

这将为您的代码保留1024mb的堆空间。如果你想要512 MB,你可以使用:

java -Xmx512m mypackage.Test

在1024m, 512m等单位使用小m

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

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

在我的情况下,我不能增加org.gradle.jvmargs=-Xmx…在它。超过1GB的属性。它没有工作,因为我的机器上安装了两个Java,一个是32位的(Gradle正在使用这个),另一个是64位的。我通过添加指向64位Java的JAVA_HOME环境变量解决了这个问题。