首页 文章

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

提问于
浏览
232

当我运行时,每次尝试运行程序时,我都会反复出现以下异常 .

VM初始化期间发生错误无法为对象堆保留足够的空间无法创建Java虚拟机 .

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

25 回答

  • 1

    无论如何,这是如何修复它:转到开始 - >控制面板 - >系统 - >高级(选项卡) - >环境变量 - >系统变量 - >新建:变量名称:_JAVA_OPTIONS变量值:-Xmx512M

    要么

    更改 Ant 电话,如下所示 .

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

    它对我有用 .

  • 2

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

  • 2

    我有类似的问题 . 我在64位机器上安装了32位版本的Java . 卸载该版本并安装64位版本的Java . 我能够解决这个问题 .

  • 19

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

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

  • 6

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

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

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

  • 114

    这是如何解决它:

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

    变量 - >新:变量名称: _JAVA_OPTIONS

    变量值: -Xmx512M

    变量名称: Path
    变量值: %PATH%;C:\Program Files\Java\jre6\bin;F:\JDK\bin;

    将其更改为适当的路径 .

  • 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的新实例将启动正常,我能够运行我的应用程序 .

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

  • 2

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

  • 6

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

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

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

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

  • 21

    转到开始 - >控制面板 - >系统 - >高级(选项卡) - >环境变量 - >系统变量 - >新建:

    变量名称:_JAVA_OPTIONS变量值:-Xmx512M

  • 0

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

  • -2

    我得到了同样的错误,并通过在run.conf.bat中配置解决了这个问题

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

    如果空闲内存不可用,则在传递语句时请在run.conf.bat中进行更改

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

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

    java -Xmx1024m mypackage.Test
    

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

    java -Xmx512m mypackage.Test
    

    1024m512m 等中使用小m

  • 39

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

  • 6

    不需要像下面那样在POM文件中进行任何操作

    <configuration>
        <maxmemory>1024M</maxmemory>
    </configuration>
    
  • 0

    错误:

    对于错误, "error occurred during initialization of vm could not reserve enough space for object heap 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内存分配池参数 .

    决议:

    • 增加堆大小 . 要增加堆大小,

    • goto - > jboss-eap-6.2 \ bin \ standalone.conf.bat或jboss-eap-6.2 \ bin \ standalone.conf

    • change - > JAVA_OPTS = "-Xms256m -Xmx512m -XX:MaxPermSize=256m"其中-Xms是最小堆大小,-Xmx是最大堆大小 .

    • 通常不建议最小和最大相同的尺寸 .

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

    • 双击服务器

    • 选择'open launch configuration'您将被重定向到窗口'Edit launch configuration properties' .

    • 在这个窗口中转到标签'(x)=Arguments' .

    • 在VM Arguments中,定义堆大小,如下所述

    • "-Dprogram.name=JBossTools: JBoss EAP 6.1+ Runtime Server" -server -Xms256m -Xmx512m -XX:MaxPermSize = 256m -Dorg.jboss.resolver.warning = true

  • 0

    有时它涉及到

    $ sysctl vm.overcommit_memory
    vm.overcommit_memory = 2
    

    如果您将其设置为:

    $ sysctl vm.overcommit_memory=0
    

    它应该工作 .

  • 14

    我在使用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
    

    这编译好了 .

    在具有大量内存但具有较低内存ulimits的计算机上,这种情况发生在我身上 . Java决定分配一个大堆,因为它检测到机器中的ram,但由于ulimits不允许分配它 .

  • 5

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

    我在settings.grade文件1536中将内存值更改为512并且它有所帮助

  • 0

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

    -Xms2G
    -Xmx2G
    

    -Xms256M
    -Xmx256M
    

    这解决了我 . 希望这可以帮助其他人 .

  • 0

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

    -Xms1536m -Xmx1536m
    

    这可能/将起作用:

    -Xms1336m -Xmx1336m
    
  • 1

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

  • 0

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

    java -d64 -Xmx512M mypackage.Test
    
  • 0

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

  • 40

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

相关问题