“虚拟机初始化时发生错误; 使用-Xmx3G无法为对象堆预留足够的空间

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

我试图在Eclipse的运行configuration中的“虚拟机参数”下使用-Xmx3G保留3GB的空间。

每次我尝试保留超过1500MB,我得到这个错误:“虚拟机初始化时发生错误; 使用-Xmx3G无法为对象堆预留足够的空间

这里发生了什么?

难道你在那台机器上使用32位的jvm?

这实际上不是一个特定于Eclipse的问题。 这是一个普通的Java-on-Windows问题。 这是因为JVM如何在Windows上分配内存; 它坚持要分配连续的内存块,即使有足够的单独的块来满足分配请求,这往往是Windows无法提供的。 有一些公用事业公司试图帮助Windows“整理”其内存,理论上这将有助于这种情况; 但是我没有真正地尝试过,所以不能说清楚它们的有效性。 有一件事我听说有时候可能会有所帮助,那就是重新启动Windows,在启动任何其他应用程序之前,启动需要大量内存的Java应用程序。 如果幸运的话,Windows将不会碎片化它的内存空间,而Java将会得到要求的连续块。

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

但是,我确实发现了这个,看起来很有帮助: https : //stackoverflow.com/a/497757/639520

这是如何解决它: 转到 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; 

将其更改为适当的path

首先32位的JRE不能使用更多〜1.5Gb的RAM。 所以,如果你想要更多,使用64位JRE。

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

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

确保Eclipse实际上正在运行您认为正在运行的相同JVM。 如果你在你的web浏览器中使用java,你可能会有一个32位的版本,如果最近安装或更新的话可能会优先考虑。

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

 -vm C:/Java/jdk1.6.0_27/bin 

…在我的机器C:/Java/jdk1.6.0_27/bin ,我知道的JVM是64位的位置。 确保在那里有bin文件夹。

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

这是堆大小的问题。 编辑你的.bat (batch file)。 它可能会显示堆大小1024.将其更改为512然后它应该工作。

在使用32位的Eclipse和64位的JVM时,我也遇到了同样的问题。 当我将Eclipse路由到32位JVM时,它就起作用了

可能你正在尝试错误的选项。 我得到了与支持错误日志类似的错误:

 Java HotSpot(TM) Client VM warning: ignoring option PermSize=32M; support was removed in 8.0 Java HotSpot(TM) Client VM warning: ignoring option MaxPermSize=128M; support was removed in 8.0 

我的情况,该软件不支持Java 8的(脚本使用旧的JVM参数),但我有默认的Java 8。

这个问题的原因之一是没有可用于Tomcat的内存启动。 尝试从Windows中删除不需要的正在运行的软件,然后重新启动eclipse和tomcat。