37

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

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

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

编辑:

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

4

7 回答 7

69

我在Visual Studio 2015 with cordova 5.1.1 under Windows 10中遇到了同样的错误。

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

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

这篇文章为我指明了正确的方向。我确实稍微更改了说明,因此它们适合 Windows 10。

希望它可以帮助某人!

于 2015-09-13T17:18:33.707 回答
35

安装 64 位 Java 为我解决了这个问题

于 2014-10-27T14:15:08.050 回答
13

虽然这个问题有点老,但我想提出问题的(可能)根本原因:JVM 在启动时请求一整块内存。如果找不到,则会出现“无法保留...”错误。John Pape 在 IBM 的开发博客中写了一篇关于这个问题的启发性文章: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 没有问题。
于 2015-08-26T06:53:10.307 回答
3

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

一些值得尝试的事情:

  • 检查您是否内存不足,尝试关闭其他应用程序。这种情况有时会发生在我身上,即使我的 8GB 内存中仍有 3GB 可用!这 3GB 可以被分成所有小于 512MB 的块 [例如:如果你有 -Xmx512m]... 重新启动是整理内存的一种方法。或者关闭 Firefox,这将释放一个演出;-)

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

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

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

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

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

我同意你的观点,在 gradle 集成出现之前,我从来没有遇到过 IDEA 的任何内存问题[完全没有问题]。

于 2015-06-18T16:30:41.370 回答
1

在您的 android 文件夹中有一个gradel.properties 文件并添加以下行:

org.gradle.jvmargs=-XX\:MaxHeapSize\=256m -Xmx256m

我在使用 Intellij 和 Flutter 时遇到了这个问题。您可能会发现添加的另一个有用的属性是声明 JDK 的位置。

org.gradle.java.home=C:\\Your\\JDK\\path
于 2018-12-13T09:11:03.577 回答
0

就我而言,我打开了太多东西。释放内存使其工作。

于 2014-11-09T14:17:42.303 回答
0

按着这些次序:

1° 安装 Java SDK - 64 位或 32 位

https://www.oracle.com/br/java/technologies/javase/javase-jdk8-downloads.html

2°配置环境变量

视窗 10 -

2.1° - 控制面板 -> 系统和安全 -> 高级系统设置 -> 环境变量

2.2° - 在环境变量中,需要添加你安装的SDK的路径:

windows 32bits 点击添加 -> 变量名:JAVA_HOME 变量值:C:\Program Files(x86)\Java\jdk1.8.0_291

windows 64bits 点击添加 -> 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.8.0_291

完成这些步骤后,您应该可以正常运行了。

于 2021-06-20T15:11:48.513 回答