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

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

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

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


当前回答

不需要做任何事情,只是在POM文件更改如下

<configuration>
    <maxmemory>1024M</maxmemory>
</configuration>

其他回答

使用-XX:MaxHeapSize=512m(或任何您需要的大数字)(或-Xmx512m简称)运行JVM

假设你的类在包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文件。

我得到了同样的错误,它得到解决时,我删除临时文件使用%temp%和重新启动eclipse。

有时,此错误表明服务器上的物理内存和交换空间实际上已被充分利用!

我最近在一台运行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实例将正常启动,并且我能够运行我的应用程序。

(显然,对我来说,这只是一个暂时的解决方案;我还有一项未完成的任务,那就是对那台机器上运行的进程进行更彻底的检查,看看是否可以采取一些措施来降低名义上的内存使用水平,而不必求助于停止应用程序。)