在Intellij IDEA中不断获得Gradle错误“无法为对象堆保留足够的空间”

所以我的内存分配有问题。 有时它有效,有时则不然。 我已经阅读过这个post,并多次尝试了这些建议。 有时-Xms512m -Xmx768m有效,有时-Xms256m -Xmx512m 。 我厌倦了必须在Build, Execution, Deployment > Build Tools > Gradle > Gradle VM选项设置下在IntelliJ中调整此设置。 有没有设置可以一劳永逸地解决这个问题?

我的Windows 7计算机上有16GB的RAM,我正在运行IntelliJ IDEA EAP 14 build 138.2210.3,64位版本。 Android Gradle构建插件v0.12。

我怀疑gradle没有以64位模式运行,否则它将有大约7 GB的可用内存。 为什么不利用这个?

编辑:

我在Windows 10下使用cordova 5.1.1Visual Studio 2015中遇到了同样的错误。 请参阅下面的解决方案

我在Windows 10下使用cordova 5.1.1Visual Studio 2015中遇到了同样的错误。

要解决此问题,请设置此环境variables:

 _JAVA_OPTIONS=-Xmx512M 
  1. 右键单击开始按钮并打开“系统”
  2. 转到左侧的高级系统设置
  3. 单击“环境variables…”按钮
  4. 在“系统variables”中,单击“新建…”
  5. 新variables名称:_JAVA_OPTIONS
  6. 新variables值:-Xmx512M
  7. 单击确定
  8. 重新启动Visual Studio,以便拾取variables

本文指出了我正确的方向。 我确实更改了指令,因此它们适合Windows 10。

希望它可以帮到某人!

安装64位Java解决了它

虽然这个问题有点旧,但我想提出问题的根本原因:JVM在启动时请求整块内存。 如果找不到,则会出现“无法保留…”错误。 John Pape在IBM的devblog上写了一篇关于这个问题的精彩文章: https ://www.ibm.com/developerworks/community/blogs/aimsupport/entry/why_wont_my_jvm_start_with_this_heap_size?lang = en

这为我解决了这个问题:

  • 变体a:使用64位版本的Java,因此为Java提供了更大的可能连接空闲内存区域
  • 变体b:使用较小的XMX量的32位Java。 在gradle.properties文件中,我只使用org.gradle.jvmargs=-Xmx150m并且Gradle没有问题。

这也发生在我身上,它让我疯狂。 可能是可用的内存(ram)是碎片化的。 虽然你有足够的可用内存,但是没有可用的连续512MB块,它们都被分割成更小的块! 这就是你“有时”只看到它的原因。

一些值得尝试的事情:

  • 检查你是否内存不足,尝试关闭其他应用程序。 有时即使我仍然拥有8GB的3GB空间,我也会遇到这种情况! 3GB可以在块中碎片,这些块都小于512MB [例如:如果你有-Xmx512m] …重新启动是一种碎片整理内存的方法。 或者关闭firefox,这将释放一场演出;-)

  • 另外,令人惊讶的是,检查您的交换空间[可用磁盘空间]! 取决于机器/ JVM / etc实现。 但是如果你的交换空间很低并且你的内存碎片化,那可能是另一个原因。

  • 将-Xmx降低到-Xms128m -Xmx512m可以更容易find一块连续的可用内存块[128m]。 如果gradle真正需要512m最小值,这可能不是一个好主意。 鉴于我们正在谈论gradle,请忽略这个要点(对于其他案例/值得注意,可能是一个有用的提示)。

  • 仔细检查〜/ .gradle / gradle.properties属性中的Xms / Xmx:org.gradle.jvmargs

  • 使用idea64.exe [64bit]如果您认为IDEA使用了错误的JDK [32bit],在最新的Intellij IDEA [14.1.3撰写本文]中,请转到“设置” – >“构建,执行,部署” – >“Gradle”:“使用默认包装器”并选择你想要的Gradle JVM(如果你认为它使用了错误的那个,你会在这里看到它)。

  • 最后,这只是一个猜测但是:在上一个子弹中,我想知道你是否选择“使用项目JDK”,如果这样可以更容易find连续的内存。 我不确定这是否意味着Gradle将使用intellij IDEA已经保留的内存块。 因此,在IDEA启动时,您只需拥有一个,而不是拥有两个进程,而是可以保留更大的内存块。 但我不确定这是否准确,如果这是一个选择建议Intellij …

我同意你的意见,在Gradle集成出现之前,我从来没有遇到IDEA的任何内存问题[没有任何问题]。

在我的情况下,我打开了太多东西。 释放内存使它工作。