簡體   English   中英

OutOfMemoryError:GC開銷限制超過了api 19

[英]OutOfMemoryError: GC overhead limit exceeded api 19

錯誤:未捕獲的轉換錯誤:java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError:GC開銷限制超出了api 19

現在怎么辦?

僅當我嘗試在API 19仿真器上運行它時才會出現此錯誤(如錯誤文本所示)。 好吧,我明白我的應用程序剛剛變得很大......或者做到了嗎?

我想我實際上並沒有完全理解這個錯誤。 什么意思,然后我需要增加我的堆大小?

接下來一個問題: 增加它是不是很糟糕? 我可以僅為API 19增加它,並將其保留在其他地方,因為它在API 23上完美運行嗎?

如果我不想增加它,我該怎么辦? 我怎樣才能找出這么大的特點? 一般來說,我可以做些什么來保持它的小?

所以這些都是很多問題,並且讓他們好的主持人不要告訴我只發布一個問題,這里是最后的和所有包含的問題: 如果增加堆大小是不好的,我需要做什么避免出現此錯誤?

你在哪里遇到這個問題?

在編譯期間或運行您的應用程序期間?

如果是第一個,您需要確保在編譯階段您的堆很大。 如果您使用的是Gradle,則可以在腳本中添加以下內容:

dexOptions {
   javaMaxHeapSize "2g"
}

如果是第二個 - 運行應用程序時出現錯誤,您可能需要重新設計應用程序,以便消耗更少的內存。 您無法控制用戶設備的JVM參數。

編輯:我不知道為什么兩個API級別之間存在差異,但我認為這與從API級別21使用另一個運行時(ART)這一事實有關。 在這里閱讀更多相關信息: https//developer.android.com/studio/build/multidex.html編譯階段可能因此而略有不同,導致API級別之間的內存要求不同。

據我所知,沒有辦法增加真實手機上的堆大小,只能增加模擬器中的堆大小。 我的經驗是每個設備都有自己固定大小的堆使用的堆。 我的一些應用程序沒有運行在“較舊的”Android- / API版本上,我遇到了同樣的問題。 我使用的舊三星Galaxy S2只有64MB的堆,這是無法改變的。

我的最終解決方案是配置我的應用程序並進行大量重新設計,以某種方式減少我的應用程序的內存消耗。 幸運的是谷歌已經寫了一些關於這個主題的內容以及如何處理它。 我建議你開始閱讀管理應用程序的內存調查你的RAM使用情況 在那里,您將找到開始分析應用程序內存消耗的所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM