2012-02-16 59 views
64

首先,我有一个8gb的RAM,所以我怀疑总内存是问题。 此应用程序在6GB或更低的机器上运行良好。“VM初始化期间发生错误;无法为对象堆预留足够的空间“使用-Xmx3G

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

每当我尝试保留超过1500mb时,出现此错误: “VM初始化期间发生错误;无法为对象堆预留足够的空间“使用-Xmx3G

这里发生了什么?

+2

你有什么版本的java?你在运行什么操作系统? – 2012-02-16 02:07:42

+0

这是Win7,我安装了3个不同的Java版本。其中之一就是Eclipse使用的32位JRE。 – user1212731 2012-02-16 19:32:23

+3

不要忘记标记答案是正确的。 – xdhmoore 2013-03-20 21:10:53

回答

51

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

+5

对不起,这个愚蠢的问题,但我该如何检查?我怎样才能使用64位? – user1212731 2012-02-16 00:48:24

+2

实际上,我只是在命令行尝试了java -d64 -version,并且发现了64位的服务器虚拟机。 – user1212731 2012-02-16 00:51:17

+6

显然Eclipse使用的是之前安装的JRE的32位版本,即使64位是最新的安装。我更改了首选项 - >已安装JRE中的设置来解决此问题。非常感谢您的回答! – user1212731 2012-02-16 19:28:13

37

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

某些地方在interwebs上有更多的技术解释和 分析这个问题,但我没有任何引用方便。

我发现这一点,虽然,这看起来有所帮助:https://stackoverflow.com/a/497757/639520

+1

在我的情况,你的答案似乎工作。我没有重新启动Windows,但我尝试关闭窗口中的其他应用程序,然后运行Java,它能够启动虚拟机。 – sttaq 2015-02-16 10:08:05

+0

就是这样!谢谢!!! – manyways 2015-08-05 09:07:40

+0

你已经拯救了我的世界免于被毁灭。 – 2017-07-14 11:41:46

8

确保Eclipse的实际运行,你认为它运行在同一个JVM。如果你在你的web浏览器中使用java,你可能会有一个32位的版本,如果它最近安装或更新,它可能会优先。我的机器C:/Java/jdk1.6.0_27/bin,我知道JVM是64位位于

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

...其中:

要绝对肯定,我建议在顶部添加以下两行的eclipse.ini文件。确保在那里有bin文件夹。

(作为奖励,在Windows 7上,这也让你真正“固定标签”这就是为什么我必须为我自己的使用做到这一点)

+0

-vm参数应该指向Java可执行文件,而不仅仅是一个文件夹。请参阅http://wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM – 2012-02-16 15:03:12

+1

错误。看到这个Eclipse错误:https://bugs.eclipse.org/bugs/show_bug.cgi?id=314805 – 2012-02-16 16:18:21

+0

这确实是问题! Eclipse使用的是我在某些时候安装的JRE的32位版本。非常感谢你的回答,并带领我朝着正确的方向前进!我非常感谢。 – user1212731 2012-02-16 19:25:59

18

首先32位无法使用的JRE更多〜1.5Gb的内存。所以,如果你想要更多,使用64位JRE。其次,当一个新的JVM启动时,这个总和正在运行的所有JVM的-Xmx属性,并且检查系统上是否有足够的内存在它们自己的-Xmx上运行,如果不够则发生错误。

4

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

12

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

+0

http://www.genericarticles.com/mediawiki/index .php?title = How_to_increase_tomcat_memory_inside_eclipse – bulltorious 2014-08-08 20:50:27

1

我也有同样的问题,而使用的是32位的Eclipse和它使用的JVM是64位。 当我将Eclipse路由到32位JVM时,它工作了

0

反正你可能试错了选项。 我有一个类似的错误与支持错误日志:

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。

34

这里是如何解决它: 转到Start->Control Panel->System->Advanced(tab)->Environment Variables->System

更改为您合适的路径

+1

工作!谢谢 – Hardik4560 2015-10-15 08:11:29

+2

谢谢兄弟!它的作用就像魅力。 – uniquephase 2016-08-20 14:31:09

+1

只是为他人注意。您添加一个SYSTEM变量,而不是一个USER变量。我在Eclipse中遇到了这个问题,在进行上述更改后不必重新启动我的机器......我只需重新启动Eclipse。谢谢! – 2017-03-22 15:12:15

0

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

相关问题