Grow heap (frag case) 堆內(nèi)存過(guò)大的深入解析
對(duì)于Android開(kāi)發(fā)者來(lái)說(shuō)雖然使用了可以自動(dòng)管理內(nèi)存的Java語(yǔ)言,但是對(duì)于內(nèi)存管理不當(dāng),可能你的應(yīng)用不斷出現(xiàn)類似INFO/dalvikvm-heap(10798): Grow heap (frag case) to 6.437MB for 1114126-byte allocation,而出現(xiàn)的
Grow heap 后面的值不斷增加,接下來(lái)輕微則Android系統(tǒng)開(kāi)始結(jié)束后臺(tái)任務(wù)來(lái)增加不斷增加的堆內(nèi)存問(wèn)題,最后可能直接出現(xiàn)OOM,同時(shí)有時(shí)候GC還可能出現(xiàn)GC freed 0 objects / 0 bytes in 75ms這樣的問(wèn)題,對(duì)于Java的內(nèi)存管理我們近期已經(jīng)說(shuō)到了,就上面這些問(wèn)題Android123給大家做一個(gè)簡(jiǎn)單的分析。
1. 這里Grow heap (frag case) to 6.437MB for 1114126-byte allocation表示你一直在分配一個(gè)較大的對(duì)象,占用的堆內(nèi)存達(dá)到了6.4MB。
2. 為什么會(huì)出現(xiàn)這樣的問(wèn)題,經(jīng)過(guò)詢問(wèn)表示是因?yàn)榉峙淞艘粋€(gè)byte[]數(shù)組,需要以Blob方式寫入SQLite數(shù)據(jù)庫(kù),而造成的這么大的單個(gè)對(duì)象出現(xiàn),這里Android開(kāi)發(fā)網(wǎng)提醒大家,這是很危險(xiǎn)的操作,對(duì)于不同固件和低RAM配置的設(shè)備隨時(shí)都有OOM的危險(xiǎn),如果你真的需要往SQLite存儲(chǔ)二進(jìn)制,這里可以采用分段的方式,將某個(gè)對(duì)象拆分為1MB或更小,分更多的段來(lái)存放,中間加一層拆分?jǐn)?shù)據(jù)緩存層來(lái)解決比較好。
3. 同時(shí)每次構(gòu)造單個(gè)較大對(duì)象前,可以通知gc準(zhǔn)備收集,比如在執(zhí)行需要耗操作前執(zhí)行System.gc(); 防止OutOfMemoryError的發(fā)生,對(duì)于Java的內(nèi)存溢出問(wèn)題,今后我們會(huì)通過(guò)各種案例來(lái)講解。
相關(guān)文章
Android實(shí)現(xiàn)連續(xù)點(diǎn)擊多次事件的代碼詳解
小編經(jīng)常遇到這樣的需求類似進(jìn)入開(kāi)發(fā)者模式,即多次點(diǎn)擊后執(zhí)行操作。下面小編通過(guò)實(shí)例代碼給大家講解Android實(shí)現(xiàn)連續(xù)點(diǎn)擊多次事件的相關(guān)知識(shí),感興趣的朋友跟隨小編一起學(xué)習(xí)吧2018-10-10
Android獲取系統(tǒng)儲(chǔ)存以及內(nèi)存信息的方法(一)
這篇文章主要為大家詳細(xì)介紹了Android獲取系統(tǒng)儲(chǔ)存以及內(nèi)存信息的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
Android實(shí)現(xiàn)顯示和隱藏密碼功能的示例代碼
在前端中我們知道用javascript就可以可以很容易實(shí)現(xiàn)密碼的顯示與隱藏,本文將大家詳細(xì)介紹Android是如何實(shí)現(xiàn)顯示和隱藏密碼功能的,需要的可以參考一下2022-06-06
kotlin中的數(shù)據(jù)轉(zhuǎn)換方法(示例詳解)
這篇文章介紹了Kotlin中將數(shù)字轉(zhuǎn)換為字符串和字符串轉(zhuǎn)換為數(shù)字的多種方法,包括使用`toString()`、字符串模板、格式化字符串、處理可空類型等,同時(shí),也詳細(xì)講解了如何安全地進(jìn)行字符串到數(shù)字的轉(zhuǎn)換,并處理了不同進(jìn)制和本地化格式的字符串轉(zhuǎn)換,感興趣的朋友一起看看吧2025-03-03
Android 中ActionBar+fragment實(shí)現(xiàn)頁(yè)面導(dǎo)航的實(shí)例
這篇文章主要介紹了Android 中ActionBar+fragment實(shí)現(xiàn)頁(yè)面導(dǎo)航的實(shí)例的相關(guān)資料,希望通過(guò)本文能幫助到大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下2017-09-09
Android 修改系統(tǒng)關(guān)機(jī)動(dòng)畫的實(shí)現(xiàn)
這篇文章主要介紹了Android 修改系統(tǒng)關(guān)機(jī)動(dòng)畫的實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2016-10-10
Android啟動(dòng)屏實(shí)現(xiàn)左右滑動(dòng)切換查看功能
這篇文章主要介紹了Android啟動(dòng)屏實(shí)現(xiàn)左右滑動(dòng)切換查看功能的相關(guān)資料,針對(duì)新功能屬性介紹和啟動(dòng)屏進(jìn)行詳細(xì)講解,感興趣的小伙伴們可以參考一下2016-01-01
Fragment 多層嵌套方法調(diào)用問(wèn)題的解決方案
這篇文章主要介紹了Fragment 多層嵌套方法調(diào)用問(wèn)題的解決方案的相關(guān)資料,需要的朋友可以參考下2016-08-08
Android應(yīng)用中炫酷的橫向和環(huán)形進(jìn)度條的實(shí)例分享
這篇文章主要介紹了Android應(yīng)用中炫酷的橫向和圓形進(jìn)度條的實(shí)例分享,文中利用了一些GitHub上的插件進(jìn)行改寫,也是一片很好的二次開(kāi)發(fā)教學(xué),需要的朋友可以參考下2016-04-04

