OutOfMemoryError:GC开销限制超出了android

时间:2016-03-21 13:08:34

标签: java android garbage-collection execute

在android studio 1.5.1中,只需将源代码从一个系统移动到另一个系统即使干净的构建成功但是代码运行时我遇到了这种错误

  

java.lang.OutOfMemoryError:超出GC开销限制错误:执行   任务失败':app:dexDebug'。 >   com.android.ide.common.process.ProcessException:   org.gradle.process.internal.ExecException:进程'命令   ' / usr / lib中/ JVM / JAVA -7-的openjdk-AMD64 / bin中/ JAVA''完成非零   退出值3

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

Active Record

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

更新的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

答案 2 :(得分:0)

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

这取自Oracle Java Documentation

答案 3 :(得分:0)

您可以通过添加

来增加为应用分配的内存
android:largeHeap="true"

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