“虚拟机初始化时发生错误; 使用-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。