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

Nar*_*dra 260 java heap jvm

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

VM初始化期间发生错误

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

无法创建Java虚拟机.

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

Boz*_*zho 202

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

  • 或者更短,-mx256m或-mx512m;) (42认同)
  • 谢谢..结果太大了一个数字也可能是一个问题,可以给出同样的错误! (18认同)
  • 有人找到了一种实际上100%可以正常工作的解决方案吗?这个解决方案暂时解决了这个问题但突然又回来了.我有16GB的RAM,我已经厌倦了这个sh*t.过去一切都好一点:[ (14认同)
  • -mx与-Xmx和-XX:MaxHeapSize相同吗? (8认同)
  • 在使用x86或x64 Java的Windows 8上对我不起作用. (5认同)
  • 安装64位JDK而不是32位解决了它. (4认同)
  • -mx与Java 7中的-Xmx相同,如上所述.-mx在Java 6及更低版本中不可用.-X表明它是实验性的,经过这么多年,最终HotSpot团队决定它不再是实验性的. (4认同)

dja*_*fan 122

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

-Xms1536m -Xmx1536m
Run Code Online (Sandbox Code Playgroud)

可能/将起作用:

-Xms1336m -Xmx1336m
Run Code Online (Sandbox Code Playgroud)

  • 我忘了提到在32位命令shell中启动时必须发生此问题.64位命令shell可能没有此问题. (5认同)

Jen*_*man 45

我在使用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.
Run Code Online (Sandbox Code Playgroud)

所以这里的解决方案就这样设置了_JAVA_OPTIONS

-bash-3.2$ export _JAVA_OPTIONS="-Xmx256M"
-bash-3.2$ javac HelloWorldApp.java 
Picked up _JAVA_OPTIONS: -Xmx256M
Run Code Online (Sandbox Code Playgroud)

这编译得很好.

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

  • +1 用于指出 _JAVA_OPTIONS — 在我的情况下,java 是从我没有写访问权限的 shell 脚本深处的某个地方调用的,因此此选项更可取。 (2认同)

Moh*_*del 44

这是如何解决它:

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

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

变量值: -Xmx512M

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

将其更改为适当的路径.

  • 与 [this answer](http://stackoverflow.com/a/24406013/1555990) 非常相似,我会说...... (2认同)

Joh*_*Eye 32

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

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

  • 我认为这是最好的答案,以防您在使用 -Xmx[bignumber]m 选项后不断收到错误消息。帮助我正确运行 Apache jMeter。 (2认同)

Axl*_*Axl 26

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

java -d64 -Xmx512M mypackage.Test
Run Code Online (Sandbox Code Playgroud)

  • 这个答案应该在顶部.花了两个月的时间来解决这个问题,只是意识到安装64位Java解决了这个问题(在我的情况下,-d64选项不是必需的) (4认同)

小智 14

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

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

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

set "JAVA_OPTS=-Xms512m -Xmx512m -XX:MaxPermSize=256m
Run Code Online (Sandbox Code Playgroud)


liv*_*ove 11

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

替换这一行:

org.gradle.jvmargs=-Xmx1536M
Run Code Online (Sandbox Code Playgroud)

和:

org.gradle.jvmargs=-Xmx512m
Run Code Online (Sandbox Code Playgroud)

说明:来自 Gradle 文档的最大限制:

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


Man*_*rma 7

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


kra*_*r65 7

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

-Xms2G
-Xmx2G
Run Code Online (Sandbox Code Playgroud)

-Xms256M
-Xmx256M
Run Code Online (Sandbox Code Playgroud)

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


eup*_*a83 6

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

java -Xmx1024m mypackage.Test
Run Code Online (Sandbox Code Playgroud)

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

java -Xmx512m mypackage.Test
Run Code Online (Sandbox Code Playgroud)

使用在小M 1024m,512m


Jon*_*der 6

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

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

java -version
Run Code Online (Sandbox Code Playgroud)

导致相同的错误,这确定问题不是我的应用程序特定的.

运行

cat /proc/meminfo
Run Code Online (Sandbox Code Playgroud)

据报道,MemFree和SwapFree分别低于MemTotal和SwapTotal值的1%:

MemTotal:     49300620 kB
MemFree:        146376 kB
...
SwapTotal:     4192956 kB
SwapFree:         1364 kB
Run Code Online (Sandbox Code Playgroud)

在计算机上停止其他几个正在运行的应用程序会使可用内存数据有所增加:

MemTotal:     49300620 kB
MemFree:       2908664 kB
...
SwapTotal:     4192956 kB
SwapFree:      1016052 kB
Run Code Online (Sandbox Code Playgroud)

此时,Java的新实例将启动正常,我能够运行我的应用程序.

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


Pra*_*kar 6

错误:

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

根本原因 :

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

  • 例如: - JAVA_OPTS = "MaxPermSize参数=256米Xms1303m -Xmx1303m -XX"在JBoss中-EAP-6.2\BIN\standalone.conf或: "MaxPermSize参数= 256M JAVA_OPTS = -Xms1G -Xmx1G -XX"在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参数=256米",其中-Xms是最小堆大小和-Xmx是最大堆大小.
  • 通常不推荐它具有相同的最小和最大尺寸.

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

  • 双击服务器
  • 选择"打开启动配置",您将被重定向到"编辑启动配置属性"窗口.
  • 在这个windown转到选项卡'(x)= Arguments'.
  • 在VM Arguments中,定义堆大小,如下所述
  • "-Dprogram.name = JBossTools:JBoss的EAP 6.1以上运行时服务器" -server -Xms256m -Xmx512m -XX:MaxPermSize参数=256米-Dorg.jboss.resolver.warning =真