无法为对象堆预留足够的空间

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

虚拟机初始化时出错

无法为对象堆预留足够的空间

无法创建Java虚拟机。

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

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

1165808 次浏览

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

假设您有足够的空闲内存,并且正确地设置了JVM参数,那么您可能会遇到内存碎片的问题。检查Windows XP上的Java最大内存

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

java -Xmx1024m mypackage.Test

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

java -Xmx512m mypackage.Test

1024m512m等中使用小m

结合-Xmx512M使用-d64确保您运行的是64位虚拟机。在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"

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

-Xms1536m -Xmx1536m

可能/工作的地方:

-Xms1336m -Xmx1336m

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

<configuration>
<maxmemory>1024M</maxmemory>
</configuration>
我最近遇到了这个问题。我有3个java应用程序,起始堆大小为1024m或1280m。 Java正在查看交换中的可用空间,如果没有足够的可用内存,则jvm退出

为了解决这个问题,我不得不终止几个分配了大量虚拟内存的程序。

我在x86-64 linux和64位jvm上运行。

我在使用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很大但内存上限较低的机器上遇到过这种情况。Java决定分配一个大堆,因为它检测到机器中的ram,但由于ulimit,它不允许分配它。

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

我最近在一台运行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程序: -在终端上运行你的程序,使用正确的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),并杀死那些占用分配内存且对你的操作系统不需要的进程!试着重新运行程序。

错误:

对于错误,虚拟机初始化时出现错误,无法为jboss对象堆预留足够的空间。

根本原因:

  • JVM内存分配不当/不足,如下所述。

  • 例如:JAVA_OPTS="-Xms1303m -Xmx1303m -XX:MaxPermSize=256m" "JAVA_OPTS=-Xms1G -Xmx1G -XX:MaxPermSize=256m" 在jboss-eap-6.2\bin\standalone.conf.bat,这只是JVM内存分配池参数。

解决方法:

  • 增加堆大小。要增加堆大小,
  • Goto -> jboss-eap-6.2\bin\standalone.conf.bat或jboss-eap-6.2\bin\standalone.conf.bat
  • change ->JAVA_OPTS="- xms256m - xmx512m - xx:MaxPermSize=256m",其中- xms是最小堆大小,- xmx是最大堆大小。
  • 通常不建议使用相同大小的min和max。

  • 如果从eclipse运行应用程序,

  • 双击服务器
  • 选择“打开启动配置”,你将被重定向到“编辑启动配置属性”窗口。
  • 在这个窗口转到标签'(x)=Arguments'。
  • 在VM参数中,定义堆大小,如下所述
  • "-Dprogram.name=JBossTools: JBoss EAP 6.1+ Runtime Server" -server -Xms256m -Xmx512m -XX:MaxPermSize=256m - dogg . JBoss .resolver.warning=true

如果您运行的是32位JVM,那么将堆大小更改为较小可能会有所帮助。你可以通过直接向java传递参数或通过环境变量来做到这一点,

java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"

对于64位JVM,更大的堆大小,如-Xms512M -Xmx1536M应该工作。

为Java7运行java -versionjava -d32java--d64来检查您正在运行的版本。

不管怎样,这里是如何修复它: 单击“开始”->控制面板->系统->高级(tab)->环境变量->系统变量->新建: 变量名:_JAVA_OPTIONS 变量值:-Xmx512M

更改ant调用,如下所示。

   <exec
**<arg value="-J-Xmx512m" />**
</exec>

这对我很管用。

我有适量的内存设置,但对我来说,它是使用64位intellij和32位jvm。一旦我切换到64位虚拟机,错误就消失了。

下面是解决方法:

  • 进入开始->控制面板->系统->高级(tab)->环境变量->系统

    变量->新:变量名:_JAVA_OPTIONS 变量值:-Xmx512M 变量名:Path
    变量值:%PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

将其更改为适当的路径。

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

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

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

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

虚拟机初始化时出错 无法为1572864KB对象堆预留足够的空间 我在设置中改变了内存的值。级文件 1536到512,它帮助

有时它与

$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

如果你设置为:

$ sysctl vm.overcommit_memory=0

它应该会起作用。

我知道这里已经有很多答案了,但没有一个能帮到我。最后,我打开文件/etc/elasticsearch/jvm.options并更改:

-Xms2G
-Xmx2G

-Xms256M
-Xmx256M

这为我解决了问题。希望这能帮助到这里的其他人。

将cassandra bin目录下cassandra.bat文件中的-Xmx2G替换为-Xms512M或更大的内存大小。

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

单击“开始”->控制面板->系统->高级(tab)->环境变量->系统变量->新建:

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M

打开它。android文件夹中的属性文件。

替换这一行:

org.gradle.jvmargs=-Xmx1536M

:

org.gradle.jvmargs=-Xmx512m
< p >解释: 从Gradle文档的最大限制:

如果请求的构建环境没有指定最大堆大小,守护进程将使用最多512MB的堆。

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