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

时间:2010-12-09 17:46:38

标签: java jvm heap

每次尝试运行程序时,我都会遇到以下异常重复

  

VM初始化期间发生错误

     

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

     

无法创建Java虚拟机。

我试图增加我的虚拟内存(页面大小)和RAM大小,但无济于事。任何人都可以告诉我如何消除这个错误?

27 个答案:

答案 0 :(得分:199)

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

答案 1 :(得分:117)

这也可能是因为在32位HotSpot vm上设置了太大的东西,例如:

-Xms1536m -Xmx1536m

可能/将工作:

-Xms1336m -Xmx1336m

答案 2 :(得分:42)

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

答案 3 :(得分:40)

这是如何解决它:

  • 转到开始 - >控制面板 - >系统 - >高级(标签) - >环境变量 - >系统

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

将其更改为适当的路径。

答案 4 :(得分:28)

32位Java需要内存中的连续可用空间才能运行。如果指定一个较大的堆大小,即使你有足够的可用空间,也可能没有那么多连续的可用空间。

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

答案 5 :(得分:24)

与-Xmx512M结合使用-d64以确保您正在运行64位VM。在64位计算机上,我确信我运行的是64位虚拟机,但没有。安装64位Java后,-d64选项有效,-Xmx允许更大的内存。

java -d64 -Xmx512M mypackage.Test

答案 6 :(得分:14)

我遇到了同样的错误,并通过在run.conf.bat

中配置解决了这个问题

使用Jboss5x中的配置run.conf.bat运行JVM

如果空闲内存不可用,如果您正在传递声明,请在run.conf.bat中进行更改

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m

答案 7 :(得分:8)

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

-Xms2G
-Xmx2G

-Xms256M
-Xmx256M

这解决了我。希望这有助于其他人。

答案 8 :(得分:6)

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

我最近在运行带有48 GB RAM的RedHat Enterprise Linux 5.7的服务器上看到了这个问题。我发现即使只是跑步

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实例可以启动,我可以运行我的应用程序。

(显然,对我来说,这只是一个临时解决方案;我仍然有一项出色的任务是对该机器上运行的进程进行更彻底的检查,看看是否可以采取措施降低名义内存利用率水平,而不必诉诸于停止申请。)

答案 9 :(得分:6)

错误:

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

根本原因:

  • 如下所述,我们的JVM内存分配不正确/不足。

  • e.g。 jboss-eap-6.2 \ bin \ standalone.conf中的 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
  • 更改 - > JAVA_OPTS =“ - Xms256m -Xmx512m -XX:MaxPermSize = 256m”其中-Xms是最小堆大小,-Xmx是最大堆大小。
  • 通常不推荐使用相同大小的min和max。

  • 如果您正在从eclipse运行您的应用程序,

  • 双击服务器
  • 选择“打开启动配置”,您将被重定向到“编辑启动配置属性”窗口。
  • 在这个窗口中转到标签'(x)= Arguments'。
  • 在VM Arguments中,按照下面的说明定义堆大小
  • “ -​​ Dprogram.name = JBossTools:JBoss EAP 6.1+运行时服务器”-server -Xms256m -Xmx512m -XX:MaxPermSize = 256m -Dorg.jboss.resolver.warning = true

答案 10 :(得分:6)

假设您的类在包Test中被调用mypackage。像这样运行你的代码:

java -Xmx1024m mypackage.Test

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

java -Xmx512m mypackage.Test

1024m512m

中使用小米

答案 11 :(得分:5)

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

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

答案 12 :(得分:4)

在android文件夹中打开gradle.properties文件。

替换此行:

org.gradle.jvmargs=-Xmx1536M

具有:

org.gradle.jvmargs=-Xmx512m

说明: Gradle文档中的最大限制:

如果请求的构建环境未指定最大堆大小,则守护程序将使用多达512MB的堆。

答案 13 :(得分:3)

我最近遇到过这个问题。我有3个java应用程序,以1024m或1280m堆大小开始。 Java正在查看swap中的可用空间,如果没有足够的可用内存,jvm将退出。

要解决此问题,我必须结束几个分配了大量虚拟内存的程序。

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

答案 14 :(得分:2)

如果您正在运行32位JVM,那么将堆大小更改为较小可能会有所帮助。您可以通过直接将args传递给java或通过以下环境变量

来实现此目的
java -Xms128M -Xmx512M
JAVA_OPTS="-Xms128M -Xmx512M"

对于64位JVM,像-Xms512M -Xmx1536M这样更大的堆大小应该可以工作。

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

答案 15 :(得分:2)

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

答案 16 :(得分:2)

假设您有足够的可用内存并且正确设置了JVM参数,则可能存在内存碎片问题。检查Java maximum memory on Windows XP

答案 17 :(得分:1)

无论如何,这是如何解决它: 转到开始 - >控制面板 - >系统 - >高级(标签) - >环境变量 - >系统变量 - >新增: 变量名称:_JAVA_OPTIONS 变量值:-Xmx512M

OR

更改蚂蚁电话,如下所示。

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

它对我有用。

答案 18 :(得分:1)

VM初始化期间发生错误            无法为1572864KB对象堆保留足够的空间

我在settings.grade文件中更改了内存值 1536到512,它帮助

答案 19 :(得分:0)

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

答案 20 :(得分:0)

有时它与

有关
$ sysctl vm.overcommit_memory
vm.overcommit_memory = 2

如果您将其设置为:

$ sysctl vm.overcommit_memory=0

它应该有用。

答案 21 :(得分:0)

如果您正在运行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)并终止使用分配内存的进程,这对您的操作系统来说不是必需的! =&GT;尝试重新运行您的程序。

答案 22 :(得分:0)

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

答案 23 :(得分:0)

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

答案 24 :(得分:0)

转到开始 - &gt;控制面板 - &gt;系统 - &gt;高级(标签) - &gt;环境变量 - &gt;系统变量 - &gt;新增功能:

Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M

答案 25 :(得分:0)

以上答案是正确的,但我会用最佳解决方案来解释这个问题。 当您分配了 org.gradle.jvmargs=-Xmx512m 并且仍然面临 sa,=me 问题时,那么这里是解决方案.. 出现这个错误主要是因为你的电脑100%使用了它的电源,你的项目使用了这么多资源,每当你遇到这个问题时,你可以打开任务管理器,你会看到你的磁盘被100%使用了,你的电脑也是慢,那么您可以禁用处理速度高的启动应用程序并重新启动您的电脑。 重启后,当你打开你的项目时,首先清理它,然后尝试运行它。 我已经尝试了以上所有解决方案,但仍然无法解决问题,然后我尝试释放内存使用和后台进程,我的问题已解决。

答案 26 :(得分:-2)

只需更改POM文件,无需执行任何操作,如下所示

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