AMS-->dumpApplicationMemoryUsage
pw.print(" Lost RAM: ");pw.print(memInfo.getTotalSizeKb()-totalPss-memInfo.getFreeSizeKb() -memInfo.getCachedSizeKb()? ? ? ? ? ? ? ? ? ? ? ? -memInfo.getKernelUsedSizeKb());pw.println(" kB");
LostRAM讓人誤解,以為系統(tǒng)有memoryleak.導(dǎo)致memory丟失.事實上這里的memory統(tǒng)計并不準(zhǔn)確.我們在有的手機上可以看到LostRAM為負(fù)數(shù)或者接近于0.而在有的手機上看到這個值很大.下面我們來分析其lostRAM的來源.
Lost RAM可能來自下面五個方面:
ION.我們知道很多多媒體的應(yīng)用使用ION來分配memory的.大多數(shù)芯片供應(yīng)商是沒有把這部分Memory map到process中,也就沒有統(tǒng)計在cached中.而ION為了分配效率會把這部分用過的memory先cached以便下次使用的時候直接從cache中分配,從而加快了分配速度,提高了系統(tǒng)性能.而當(dāng)系統(tǒng)的memory吃緊時,這部分cached memory會free.這往往是Lost RAM的主要來源.
KGSL. Graphic系統(tǒng)分配的內(nèi)存.這邊分內(nèi)存可能已經(jīng)map到了process中,也有可能沒有map到process中,取決于芯片廠商的實現(xiàn).如果沒有map到process ,這也是Lost RAM的重要來源.
ZRAM中被用掉的部分
多次計算用過的memory,例如filecache ,DSS等.常見的Lost RAM為負(fù)數(shù)就是這個原因.
其它計算不準(zhǔn)備的memory.
事實上我們可以從其它memoryinfo來確定是否有memory leak或其它問題.
adb shell pull /d/ion? your folder?? //可以檢查heaps來確定cached ION memory.
adb shell cat /d/kgsl/proc/*/mem > kgsl_mem.txt //可以用例看每個processgfx所用的memory.
adb shel cat /proc/meminfo 或者 adb shell cat /proc/zoneinfo//獲得更準(zhǔn)確的memoryinfo
adb shell cat /d/shrinker?? //查看可以free的memory大小及其優(yōu)先級.
adb shell cat /sys/class/kgsl/kgsl/page_alloc? //kgsl? /1024/1024 gfx 分配的size
adb shell cat /sys/kernel/debug/ion/heaps/system? //ION? total? /1024/1024