繁体   English   中英

OutOfMemoryError: GC 开销限制超过 android

[英]OutOfMemoryError: GC overhead limit exceeded android

在 android studio 1.5.1 中,只需将源代码从一个系统移动到另一个系统,即使干净构建成功,但在运行代码时我也会收到此类错误

java.lang.OutOfMemoryError:超出 GC 开销限制错误:任务“:app:dexDebug”的执行失败。 > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'' 以非完成-零退出值 3

我还在 app.gradle 中添加了以下代码:

dexOptions {
        javaMaxHeapSize "4g"
}

更新的 gradle 插件默认使用 R8 进程进行代码收缩。 您可以通过在gradle.proeprties 中添加以下行来尝试此操作

org.gradle.daemon=true

org.gradle.configureondemand=true

org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8

GC overhead limit exceeded意味着您的应用程序占用了所有堆,垃圾收集器无法清理足够的空间来运行程序。

因此,您的应用程序中存在太多必要的内存数据或内存泄漏(即可以从应用程序根目录访问但不再需要的引用) - 只有进一步的应用程序分析才能为您提供更多详细信息

详细消息"GC overhead limit exceeded"表示垃圾收集器一直在运行,并且 Java 程序进展非常缓慢。 在垃圾回收之后,如果 Java 进程花费了大约 98% 以上的时间进行垃圾回收,并且如果它正在回收不到 2% 的堆并且到目前为止一直在执行最后 5 个(编译时间常数)连续垃圾集合,然后抛出 java.lang.OutOfMemoryError 。 通常会抛出此异常,因为实时数据量几乎无法放入 Java 堆中,而 Java 堆几乎没有用于新分配的可用空间。 行动:增加堆大小。 可以使用命令行标志 -XX:-UseGCOverheadLimit 关闭超出 GC 开销限制的 java.lang.OutOfMemoryError 异常。

这取自 Oracle Java 文档

您可以通过添加来增加为应用程序分配的内存

android:largeHeap="true"

到您的清单文件,看看它是否解决了您的问题。 但是你应该在你的应用程序中寻找内存泄漏,因为 OutOfMemoryError 通常是内存管理不善的结果。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM