有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java OutOfMemoryError:超出了GC开销限制

在安卓studio1.5.1中,只需将源代码从一个系统移动到另一个系统,即使干净的构建成功,但在代码运行时,我会遇到这种错误

java.lang.OutOfMemoryError: GC overhead limit exceeded Error:Execution failed for task ':app:dexDebug'. > com.安卓.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/usr/lib/jvm/java-7-openjdk-amd64/bin/java'' finished with non-zero exit value 3

我在应用程序中添加了以下代码。格拉德尔还:

dexOptions {
        javaMaxHeapSize "4g"
}

共 (4) 个答案

  1. # 1 楼答案

    详细信息"GC overhead limit exceeded"表示垃圾收集器一直在运行,Java程序的进度非常缓慢。在垃圾收集之后,如果Java进程花费大约98%以上的时间进行垃圾收集,并且如果它正在恢复堆的不到2%,并且到目前为止一直在进行最后5次(编译时常量)连续垃圾收集,则Java进程将停止。将抛出lang.OutOfMemoryError。通常会引发此异常,因为活动数据的数量几乎无法放入Java堆,因此新分配的可用空间很小。 操作:增加堆大小。爪哇。超出GC开销限制的lang.OutOfMemoryError异常可以使用命令行标志-XX:-UseGCOverdeLimit关闭

    这是从Oracle Java文档中获取的

  2. # 2 楼答案

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

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

  3. # 3 楼答案

    您可以通过添加

    android:largeHeap="true"
    

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

  4. # 4 楼答案

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

    org.gradle.daemon=true

    org.gradle.configureondemand=true

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