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

Posted

技术标签:

【中文标题】“虚拟机初始化过程中发生错误;无法为对象堆保留足够的空间”使用 -Xmx3G【英文标题】:“Error occurred during initialization of VM; Could not reserve enough space for object heap” using -Xmx3G 【发布时间】:2012-03-07 09:57:22 【问题描述】:

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

我正在尝试在 Eclipse 的运行配置中的“VM 参数”下使用 -Xmx3G 保留 3GB 的空间。

每次我尝试保留超过 1500mb 时,我都会收到此错误:

这是怎么回事?

【问题讨论】:

你有什么版本的java?你在什么操作系统上运行? 这是 Win7,我安装了 3 个不同的 Java 版本。其中之一是 Eclipse 使用的 32 位 JRE。 不要忘记将答案标记为正确。 只需将 gridle.property 中的设置更改为适合您的空间 【参考方案1】:

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

【讨论】:

抱歉这个愚蠢的问题,但我该如何检查呢?以及如何使用 64 位? 其实我只是在命令行中尝试了java -d64 -version,结果是64位服务器虚拟机。 显然 Eclipse 使用的是我之前安装的 32 位版本的 JRE,尽管 64 位是最新安装的。我更改了 Preferences --> Installed JREs 中的设置来解决这个问题。非常感谢您的回答! 无论如何,32位不应该足以解决4gb吗? 应该是这样,但这解决了我的问题。由于缺乏解释,不赞成这个答案。 This link explains how a 32bit jvm can't go over 1gb max heap space【参考方案2】:

解决方法如下: 转到 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;  

将此更改为您的适当路径

【讨论】:

仅供他人参考。您添加 SYSTEM 变量,而不是 USER 变量。我在 Eclipse 中遇到了这个问题,并且在进行上述更改后不必重新启动我的机器......我只需要重新启动 Eclipse。谢谢! 对于好奇的人,_JAVA_OPTIONS 中的 -Xmx 标志指定了允许的最大 JVM 堆大小。这可以防止 JVM 请求不合理的空间(尤其是对于 32 位机器而言不可连续分配的空间......)【参考方案3】:

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

在互联网上的某个地方有更多的技术解释和 对这个问题进行了分析,但我手头没有任何参考资料。

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

【讨论】:

就我而言,您的回答似乎有效。我没有重新启动 Windows,但我尝试关闭 Windows 中的其他应用程序,然后运行 ​​java,它能够启动 VM。【参考方案4】:

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

其次,当一个新的JVM启动时,这会将所有正在运行的JVM的-Xmx属性相加,并检查系统上是否有足够的内存可以在自己的-Xmx上运行,如果不够则发生错误。

【讨论】:

【参考方案5】:

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

【讨论】:

genericarticles.com/mediawiki/…【参考方案6】:

确保 Eclipse 实际上运行的是您认为它正在运行的同一 JVM。如果您曾经在 Web 浏览器中使用过 java,那么您可能也有一个 32 位版本,如果它最近安装或更新,它可能会优先。

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

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

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

(作为奖励,在 Windows 7 上,这还允许您实际“固定选项卡”,这就是为什么我必须为自己的用途这样做)

【讨论】:

-vm 参数应该指向 Java 可执行文件,而不仅仅是一个文件夹。见wiki.eclipse.org/%C2%A0eclipse.ini#Specifying_the_JVM 错了。查看这个 Eclipse 错误:bugs.eclipse.org/bugs/show_bug.cgi?id=314805 这确实是问题所在! Eclipse 使用的是我在某个时候安装的 32 位版本的 JRE。非常感谢您的回答并引导我朝着正确的方向前进!我非常感谢。 @AdamRofer,这个错误很有趣,但特别是关于 Windows 7 以及解决将 Eclipse 固定到任务栏的问题。一般来说,eclipse.ini 应该指向 java 可执行文件,尽管 Equinox 启动器似乎很智能,如果 -vm 指向一个文件夹(至少在 Windows 上)它会查找 java 可执行文件。 @E-Riz“应该”对我的口味来说太严格了 :) 希望他们可以解决这个错误,而不必在某个时候更改 vm 参数。以下是对他们有好处的更多信息,可以在他们的eclipse.ini 页面上更新:wiki.eclipse.org/…【参考方案7】:

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

【讨论】:

【参考方案8】:

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

 # org.gradle.jvmargs=-Xmx1536m

【讨论】:

在 mac os 上尝试 Kotlin-multiplatform 时不确定它是如何工作的!无论如何,谢谢!【参考方案9】:

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

【讨论】:

【参考方案10】:

我知道我来晚了,但我的答案来了:

我刚刚从 Oracle 安装了 Java 在线版本(不是离线的 64 位版本)。

添加 JAVA_HOME ENV 变量后,它就可以工作了!

希望我能帮上忙:)

【讨论】:

【参考方案11】:

您可能正在尝试错误的选项。 我在支持错误日志时遇到了类似的错误:

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。

【讨论】:

【参考方案12】:

此问题的一个原因是没有内存可供 Tomcat 启动。尝试从windows中删除不需要的正在运行的软件并重新启动eclipse和tomcat。

【讨论】:

【参考方案13】:

解决方案很简单。无需深入探讨这个问题。

如果您在 64 位 机器上运行,请按照以下步骤操作:

首先卸载 32 位 java(检查 C:\Program Files (x86) 是否存在) 安装较新版本的 JDK 工具包 64 位(包括 JRE) 设置环境路径(如果您有两个不同的 64 位 JRE,以避免冲突错误) 通过键入 javac 命令签入命令提示符。 重启/完成

您可以安装两个不同的 Java,但不要忘记设置路径。

【讨论】:

【参考方案14】:

请在环境变量中设置JAVA_OPTS=-Xms256m -Xmx512m,应该可以解决问题,对我有用。

【讨论】:

以上是关于“虚拟机初始化过程中发生错误;无法为对象堆保留足够的空间”使用 -Xmx3G的主要内容,如果未能解决你的问题,请参考以下文章