資源描述:
《Android內(nèi)存泄露調(diào)試.docx》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、優(yōu)選Android?內(nèi)存泄漏調(diào)試?一、概述?如果我們編寫的代碼當(dāng)中有太多的對內(nèi)存使用不當(dāng)?shù)牡胤?,難免會(huì)使得我們的設(shè)備運(yùn)行緩慢,甚至是死機(jī)。為了能夠使得Android應(yīng)用程序安全且快速的運(yùn)行,Android的每個(gè)應(yīng)用程序都會(huì)使用一個(gè)專有的Dalvik虛擬機(jī)實(shí)例來運(yùn)行,即每個(gè)應(yīng)用程序都是在屬于自己的進(jìn)程中運(yùn)行的。一方面,如果程序在運(yùn)行過程中出現(xiàn)了內(nèi)存泄漏的問題,僅僅會(huì)使得自己的?進(jìn)程被kill掉,而不會(huì)影響其他進(jìn)程(如果是system_process等系統(tǒng)進(jìn)程出問題的話,則會(huì)引起系統(tǒng)重啟)。另一方面Android為不同類型的進(jìn)程分配了不
2、同的內(nèi)存使用上限,如果應(yīng)用進(jìn)程使用的內(nèi)存超過了這個(gè)上限,則會(huì)被系統(tǒng)視為內(nèi)存泄漏,從而被kill掉。Android為應(yīng)用進(jìn)程分配的內(nèi)存上限如下所示:?位置:/ANDROID_SOURCE/system/core/rootdir/init.rc部分腳本```#Definetheoom_adjvaluesfortheclassesofprocessesthatcanbekilledbythekernel.#TheseareusedinActivityManagerService.setpropro.FOREGROUND_APP_ADJ0s
3、etpropro.VISIBLE_APP_ADJ1setpropro.SECONDARY_SERVER_ADJ2setpropro.BACKUP_APP_ADJ2setpropro.HOME_APP_ADJ4setpropro.HIDDEN_APP_MIN_ADJ7setpropro.CONTENT_PROVIDER_ADJ1422/22優(yōu)選setpropro.EMPTY_APP_ADJ15#Definethememorythresholdsatwhichtheaboveprocessclasseswillbekilled.#The
4、senumbersareinpages(4k).setpropro.FOREGROUND_APP_MEM1536setpropro.VISIBLE_APP_MEM2048setpropro.SECONDARY_SERVER_MEM4096setpropro.BACKUP_APP_MEM4096setpropro.HOME_APP_MEM4096setpropro.HIDDEN_APP_MEM5120setpropro.CONTENT_PROVIDER_MEM5632setpropro.EMPTY_APP_MEM6144#Writev
5、aluemustbeconsistentwiththeaboveproperties.#Notethatthedriveronlysupports6slots,sowehaveHOME_APPatthesamememorylevelasservices.write/sys/module/lowmemorykiller/parameters/adj0,1,2,7,14,15write/proc/sys/vm/overmit_memory1write/proc/sys/vm/min_free_order_shift422/22優(yōu)選wri
6、te/sys/module/lowmemorykiller/parameters/minfree1536,2048,4096,5120,5632,6144#Setinititsforkedchildren'soom_adj.write/proc/1/oom_adj-16·1·2·3·4·5·6·7·8·9·10·11·12·13·14·15·16·17·1822/22優(yōu)選·19·20·21·22·23·24·25·26·27·28·29·30·1·2·3·4·5·6·7·8·9·1022/22優(yōu)選·11·12·13·14·15·16
7、·17·18·19·20·21·22·23·24·25·26·27·28·29·30二、常見的內(nèi)存使用不當(dāng)?shù)那闆r22/22優(yōu)選(一)查詢數(shù)據(jù)庫沒有關(guān)閉游標(biāo)?描述:?程序中經(jīng)常會(huì)進(jìn)行查詢數(shù)據(jù)庫的操作,但是經(jīng)常會(huì)有使用完畢Cursor后沒有關(guān)閉的情況。?如果我們的查詢結(jié)果集比較小,對內(nèi)存的消耗不容易被發(fā)現(xiàn),只有在常時(shí)間大量操作的情況?下才會(huì)復(fù)現(xiàn)內(nèi)存問題,這樣就會(huì)給以后的測試和問題排查帶來困難和風(fēng)險(xiǎn)。示例代碼:Cursorcursor=getContentResolver().query(uri...);if(cursor.moveToN
8、ext()){......}·1·2·1·2修正示例代碼:Cursorcursor=null;try{cursor=getContentResolver().query(uri...);if(cursor!=null&&cursor.