本文章轉(zhuǎn)載于搜狗測試
最近某Android項目在進行內(nèi)存的優(yōu)化,一直以來內(nèi)存的獲取使用的是dumpsys meminfo命令獲取的柒爵,但是由于其內(nèi)存值不夠詳盡,后改用smaps獲取赚爵,將此分享內(nèi)容給大家。
獲取內(nèi)存方法一:dumpsys meminfo
在adb下輸入如下命令:adb shell dumpsys meminfo
各個字段的含義:
這種方法獲取內(nèi)存可能存在一個問題:獲取內(nèi)存不夠精準(zhǔn)法瑟,如果Android應(yīng)用中的庫文件冀膝,沒有以.so后綴名結(jié)尾,那么這部分內(nèi)存占用不會歸為“.so mmap”中霎挟,而是歸為"Other mmap"中窝剖。
獲取內(nèi)存方法二:smaps
在adb下輸入如下命令:
adb -d shell ps | grepcom.sohu.inputmethod.sogou| awk '{print$2;}'? //打印被測應(yīng)用的進程id
adb -d shell su --command=\'cat /[PID]/smaps >/sdcard\'? //把PID對應(yīng)的smaps文件拷貝到手機的sdcard上。注意必須用cat酥夭,不能用cp
adb –d pull /sdcard/smaps ?//下載smaps文件
解析smaps文件
文件結(jié)構(gòu):
400ca000-400cb000:本段虛擬內(nèi)存的地址范圍
r-xp:文件權(quán)限赐纱,r(讀)、w(寫)熬北、x(執(zhí)行)疙描、p表示私有,s代表共享讶隐,如果不具有哪項權(quán)限用"-"代替
00000000:映射文件的偏移量
b3:11:文件設(shè)備號
1345:被映射到虛擬內(nèi)存文件的映索節(jié)點
dumpsys meminfo 和 smaps的關(guān)系
dumpsys meminfo 命令下的 Pss起胰、Shared Dirty、Private Dirty這三列的數(shù)據(jù)是讀取smaps文件生成巫延。
附錄:
以下是對比搜狗手機輸入法的.dex mmap效五、.ttf mmap、.so mmap與smaps中對應(yīng)值的數(shù)據(jù)炉峰,從結(jié)果上來看畏妖,數(shù)據(jù)趨勢是一樣的。
Note:因為獲取兩種內(nèi)存的工具讀取時間不一樣疼阔,所以曲線不會完全精準(zhǔn)match戒劫。