簡體   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