在Intellij IDEA中经常发生Gradle错误“无法为对象堆预留足够的空间”

所以我有一个内存分配问题。 有时候是有效的,有时却不行。 我读过这个线程,并多次尝试了这个build议。 有时-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下,我在Visual Studio 2015中用cordova 5.1.1得到了同样的错误。 请参阅下面的解决scheme

Solutions Collecting From Web of "在Intellij IDEA中经常发生Gradle错误“无法为对象堆预留足够的空间”"

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

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

 _JAVA_OPTIONS=-Xmx512M 
  1. 右键单击开始button并打开“系统”
  2. 转到左侧的高级系统设置
  3. 点击“环境variables…”button
  4. 在系统variables中,单击“新build…”
  5. 新variables名称:_JAVA_OPTIONS
  6. 新的variables值:-Xmx512M
  7. 点击OK
  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:使用32位Java,使用较小的XMX数量。 在gradle.properties文件中,我只是使用org.gradle.jvmargs=-Xmx150m和Gradle没有问题。

这也发生在我身上,这让我发疯。 这可能是内存(RAM)可用是分散的。 虽然你有足够的空闲内存,但没有连续的512MB可用块,它们都被分割成更小的块! 这就是为什么你只能“有时”看到它。

有些值得尝试的东西:

  • 检查你的内存不足,尝试closures其他应用程序。 即使我有8GB的空间,我仍然有一个好的3GB空间! 这3GB可以分成块都小于512MB [例如:如果你有-Xmx512m] …重新启动是一种方法来整理你的记忆。 或closuresFirefox,这将释放一个演出;-)

  • 另外,令人惊讶的是,检查你的交换空间[可用磁盘空间]! 取决于机器/ JVM / etc的实现。 但是,如果交换空间不足,内存不完整,这可能是另一个原因。

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

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

  • 使用idea64.exe [64位],如果您认为IDEA使用了错误的JDK [32位],则在最新的Intellij IDEA [14.1.3截至此书写]中,转到“设置” – >“构build,执行,部署” – >“Gradle”:“使用默认包装器”并select你想要的Gradle JVM(如果你认为它使用了错误的,你会在这里看到它)。

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

我同意你的看法,我从来没有遇到任何与IDEA有关的内存问题(没有任何问题),直到gradle整合。

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