首先,我有一台8GB的内存电脑,因此我怀疑总内存不是问题所在。 该应用在6GB或更小内存的机器上运行良好。
我正在尝试在Eclipse的“运行配置”下使用“VM参数”来保留3GB的空间,命令为-Xmx3G。
每次我尝试保留超过1500MB的空间时,我都会收到以下错误提示:“初始化VM时发生错误;无法为对象堆保留足够的空间”。
这是怎么回事?
首先,我有一台8GB的内存电脑,因此我怀疑总内存不是问题所在。 该应用在6GB或更小内存的机器上运行良好。
我正在尝试在Eclipse的“运行配置”下使用“VM参数”来保留3GB的空间,命令为-Xmx3G。
每次我尝试保留超过1500MB的空间时,我都会收到以下错误提示:“初始化VM时发生错误;无法为对象堆保留足够的空间”。
这是怎么回事?
你的机器上使用的是32位的java虚拟机吗?
以下是修复方法:
进入 开始->控制面板->系统->高级(tab)->环境变量->系统
开始->控制面板->系统->高级(tab)->环境变量->系统
Variables->New:
Variable name: _JAVA_OPTIONS
Variable value: -Xmx512M
Variable name: Path
Variable value: ;C:\Program Files\Java\jre6\bin;F:\JDK\bin;
将此更改为您的适当路径。
这实际上不是Eclipse特有的问题,而是一个普遍的Java-on-Windows问题。这是因为JVM在Windows上分配内存的方式;它坚持要分配一个连续的内存块,而通常Windows无法提供,即使有足够的单独的内存块来满足分配请求。
有一些实用程序将尝试帮助Windows“碎片整理”其内存,理论上有助于解决这个问题;但我并没有认真尝试过它们,不能说明它们的有效性。
有时听到的一个可能有帮助的方法是在启动任何其他应用程序之前重新启动Windows并启动需要较大内存块的Java应用程序。如果你幸运的话,Windows还没有碎片化其内存空间,Java将获得它所请求的连续块。
在互联网上有更多技术解释和分析这个问题的文献,但我手头没有任何参考资料。
我确实找到了这个看起来很有帮助的链接:https://dev59.com/M3VC5IYBdhLWcg3w1E1q#497757
首先,32位的JRE不能使用超过1.5GB的RAM。因此,如果您需要更多RAM,请使用64位的JRE。
其次,当新的JVM启动时,它会将所有正在运行的JVM的-Xmx属性相加,并检查系统上是否有足够的内存来运行它们各自的-Xmx。如果没有足够的内存,则会出现错误。
我使用eclipse IDE中的Tomcat服务器与Liferay一起使用。当单击启动服务器时,我遇到了同样的错误。 从eclipse中双击服务器打开Server Overview页面。将内存参数从-Xmx1024m -XX:MaxPermSize = 256m更新为-Xmx512m -XX:MaxPermSize = 256m。 然后就可以正常工作了。
确保Eclipse实际运行的是你认为它运行的同一个JVM。如果你曾经在浏览器中使用过Java,那么可能还有一个32位版本在那里,如果最近安装或更新了,可能会优先使用。
为了绝对确定,我建议在你的eclipse.ini
文件顶部添加以下两行:
-vm
C:/Java/jdk1.6.0_27/bin
我需要确定 64 位 JVM 所在位置,它在我的机器上的路径为 C:/Java/jdk1.6.0_27/bin
。请确保将该路径下的 bin
文件夹添加进去。
(作为额外奖励,在 Windows 7 上,这还允许您实际上“固定标签页”,这也是我必须为自己的使用而这样做的原因)
.bat
(批处理文件)。它可能显示堆大小为1024。将其更改为512,然后它应该可以工作。只需在 gradle.properties 文件中 org.gradle.jvmargs=-Xmx1536m
前面添加 #
即可。
# org.gradle.jvmargs=-Xmx1536m
我知道我有点晚了,但是我的答案来了:
我刚刚安装了Oracle的Java在线版本(不是离线64位版本)。
添加了JAVA_HOME环境变量后,它就可以工作了!
希望能帮到你 :)