【问题标题】:Wired Out of memory: Java heap space error with ffmpeg library连线内存不足:ffmpeg 库的 Java 堆空间错误
【发布时间】:2019-10-09 19:51:09
【问题描述】:

这是我得到的错误:

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">

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

【问题讨论】:

  • 它不是 Android 上的 OOM,它在构建您的应用程序时会耗尽您的 PC 上的内存。与manifest文件无关

标签: android gradle ffmpeg out-of-memory heap-memory


【解决方案1】:

在 gradle 5 中,他们大大降低了 default memory 的要求。

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

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

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

增加客户端内存

GRADLE_OPTS=-Xmx1g ./gradlew build

增加守护进程内存

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

更新:

为了进一步说明,gradle 使用客户端虚拟机、守护程序虚拟机、工作虚拟机(并行运行时)以及用于某些任务的额外虚拟机。

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

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

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

可以通过任务自定义每个任务的虚拟机。对于example

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

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

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

【讨论】:

  • 谢谢,但我使用的是 gradle 4,我需要这样做吗?
  • Gradle 5 只是从 Gradle 4 中减少了 defaults。无论哪种方式,仍然有一个客户端和一个守护程序具有单独的内存设置。您可能还想尝试增加客户端内存。这可能取决于使用哪个插件。
  • 我已经完成了 daemon.but 放在哪里 GRADLE_OPTS=-Xmx1g ./gradlew build
  • @stevemoretz 这是一个环境变量,所以我给出的示例假设 bash 并且只是在您执行 gradle-wrapper 的命令行上。根据 gradle 文档,没有必要增加客户端内存,但我认为值得一试。
  • 我更新了我的答案以添加额外的注释。我现在似乎找不到它,但我记得在某处读到某些插件可能需要额外的客户端内存。我通常只使用默认值,直到它不起作用,然后为正确的 VM 设置正确的内存需要反复试验。
【解决方案2】:

在这里找到https://github.com/tanersener/mobile-ffmpeg之前我已经使用过这个库了

它将广泛支持硬件加速,并且 FFmpeg 命令的运行速度比这个 nl.bravobit 库更快。

如果您的应用支持 LollipopMarshmallow,请使用:

implementation 'com.arthenica:mobile-ffmpeg-full-gpl:4.2.LTS'

【讨论】:

  • 谢谢,但我已经提到我不能使用另一个库。这个库在我拥有的一个库中使用,我不能更改第二个库,所以我不能使用另一个 ffmpeg 库只是我不能。
  • 它可能是您使用的库的版本,因为我使用的是 1.1.5,它在我的应用程序中运行良好。您可以尝试使用 1.1.5 版
  • 谢谢,我已经用过,第一次没用,后来到了 1.1.7 还是不行。所以你用 androidx 了吗?因为我就是这么做的跨度>
  • 不,我的项目中没有使用 AndroidX。
  • 好吧,我建议你为自己着想。
猜你喜欢
  • 2014-01-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-25
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多