首页 > 解决方案 > 连线内存不足:ffmpeg 库的 Java 堆空间错误

问题描述

那么这是我得到的错误:

Out of memory: Java heap space.
Please assign more memory to Gradle in the project's gradle.properties file.
For example, the following line, in the gradle.properties file, sets the maximum Java heap size to 1,024 MB:
<em>org.gradle.jvmargs=-Xmx1024m</em>

这是因为:

implementation 'nl.bravobit:android-ffmpeg:1.1.7'

当我删除错误消失了。嗯,错误是说将堆大小增加到 1024MB,我确实将它增加到 10GB,它仍然无法工作。这就是有线的。

org.gradle.jvmargs=-Xmx10000m

仍然得到同样的错误。也试过这个:

<application
        android:largeHeap="true">

仍然没有机会。请不要建议使用替代库,因为我不能。

标签: androidgradleffmpegout-of-memoryheap-memory

解决方案


在 gradle 5 中,他们大大降低了默认内存要求。

命令行客户端现在以 64MB 堆而不是 1GB 开始。这可能会影响使用 --no-daemon 模式直接在客户端 VM 内运行的构建。我们不鼓励使用 --no-daemon,但如果必须使用它,可以使用 GRADLE_OPTS 环境变量增加可用内存。

Gradle 守护程序现在以 512MB 堆而不是 1GB 开始。大型项目可能必须使用 org.gradle.jvmargs 属性来增加此设置。

所有工作人员,包括编译器和测试执行程序,现在都从 512MB 堆开始。以前的默认值是物理内存的 1/4。大型项目可能必须在相关任务上增加此设置,例如 JavaCompile 或 Test。

增加客户端内存

GRADLE_OPTS=-Xmx1g ./gradlew build

增加守护进程内存

./gradlew -D org.gradle.jvmargs=-Xmx1g

更新:

为了进一步说明,gradle 使用客户端 VM、守护进程 VM、工作 VM(并行运行时)以及用于某些任务的附加 VM。

可以使用GRADLE_OPTS环境变量自定义客户端 VM。

可以使用org.gradle.jvmargs属性自定义守护程序 VM。

工作虚拟机是从守护程序虚拟机派生的,因此将使用相同的设置。

可以通过任务自定义每个任务的虚拟机。例如_

tasks.withType(JavaCompile) { options.compilerArgs += ['-Xdoclint:none', '-Xlint:none', '-nowarn'] }

根据有关客户端 VM 使用的 gradle 文档:

客户端 VM 仅处理命令行输入/输出,因此很少需要更改其 VM 选项。


推荐阅读