"VM初始化期间出错; 无法使用-Xmx3G为对象堆保留足够的空间

use*_*731 78 java eclipse jvm jvm-arguments

首先,我有一个8GB的内存盒,所以我怀疑总内存是什么问题.此应用程序在6GB或更低的机器上运行良好.

我试图在Eclipse的Run Configurations中的"VM Arguments"下使用-Xmx3G保留3GB的空间.

每次我尝试保留超过1500mb时,我都会收到此错误:"VM初始化期间出错; 无法使用-Xmx3G为对象堆保留足够的空间

这里发生了什么?

小智 62

可能是你在那台机器上使用32位jvm吗?

  • 抱歉这个愚蠢的问题,但我该怎么检查呢?我怎样才能使用64位? (7认同)
  • 它应该是,但这解决了我的问题.由于缺乏解释,没有为这个答案提供支持.[此链接解释了32位jvm如何无法超过1gb最大堆空间](http://javarevisited.blogspot.be/2011/05/java-heap-space-memory-size-jvm.html) (7认同)
  • 显然,Eclipse使用的是我以前安装的32位版本的JRE,即使64位是最新安装.我更改了首选项 - >已安装的JRE中的设置以解决此问题.非常感谢您的回答! (6认同)
  • 实际上,我只是在命令行中尝试了java -d64 -version,它提出了64位服务器VM. (3认同)
  • 在任何情况下,32位不足以解决4gb? (3认同)
  • 请在答案中提供答案,而不是问题 (2认同)

Moh*_*del 55

以下是如何修复它: 转到 Start->Control Panel->System->Advanced(tab)->Environment Variables->System

Variables->New:
Variable name: _JAVA_OPTIONS   
Variable value: -Xmx512M

Variable name: Path  
Variable value: ;C:\Program Files\Java\jre6\bin;F:\JDK\bin;  
Run Code Online (Sandbox Code Playgroud)

将其更改为适当的路径.

  • 只是给别人的一张便条.您添加SYSTEM变量,而不是USER变量.我在Eclipse中遇到了这个问题,并且在进行上述更改后不必重新启动我的机器......我只需要重新启动Eclipse.谢谢! (3认同)

E-R*_*Riz 40

这实际上不是特定于Eclipse的问题; 这是一个普遍的Java-on-Windows问题.这是因为JVM在Windows上分配内存的方式; 它坚持分配连续的内存块,这通常是Windows无法提供的,即使有足够的单独块来满足分配请求.有些实用程序会尝试帮助Windows"整理"其内存,这在理论上可以帮助这种情况; 但我并没有真正认真对待它们,所以不能说它们的有效性.我听过有时可能有帮助的一件事是重启Windows,在启动任何其他应用程序之前,启动需要大块内存的Java应用程序.如果你很幸运,Windows将不会破坏其内存空间,Java将获得所要求的连续块.

在互联网的某个地方有更多的技术解释和分析这个问题,但我没有任何参考方便.

我确实找到了这个,看起来很有帮助:https://stackoverflow.com/a/497757/639520

  • 就我而言,你的答案似乎有效.我没有重新启动Windows,但我尝试在我的Windows中关闭其他应用程序,然后运行java,它能够启动VM. (2认同)

Dan*_*eón 20

首先,32位的JRE不能使用更多~1.5Gb的ram.因此,如果您想要更多,请使用64位JRE.

其次,当一个新的JVM启动时,它会对正在运行的所有JVM的-Xmx属性求和,并检查系统上是否有足够的内存在自己的-Xmx上运行,如果还不够则会发生错误.


小智 15

我在eclipse IDE中使用Liferay和Tomcat服务器.点击服务器启动时我遇到了同样的错误.双击eclipse中的服务器.它打开了服务器概述页面.更新了-Xmx1024m -XX的内存参数:MaxPermSize = 256m至-Xmx512m -XX:MaxPermSize = 256m.然后它为我工作.


Ada*_*fer 8

确保Eclipse实际上运行您认为正在运行的JVM.如果你曾经在你的网络浏览器中使用过java,你可能会有一个32位版本,如果最近安装或更新它可能会优先考虑.

为了绝对确定,我建议将这两行添加到eclipse.ini顶部的文件中:

-vm 
C:/Java/jdk1.6.0_27/bin
Run Code Online (Sandbox Code Playgroud)

...在我的机器C:/Java/jdk1.6.0_27/bin上,我所知道的JVM是64位的位置.一定要有bin文件夹.

(作为奖励,在Windows 7上,这也允许你实际"固定标签",这就是为什么我必须为自己的用法这样做)


小智 5

这是堆大小的问题。编辑您的.bat(批处理文件)。它可能显示堆大小 1024。将其更改为 512 然后它应该可以工作。


小智 5

只需将符号放在gradle.properties#前面即可org.gradle.jvmargs=-Xmx1536m

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