本文共 894 字,大约阅读时间需要 2 分钟。
20是虚拟机。可悲的是5和10并没有被libc_malloc_debug库完美地支持,所以只有1好用。
第二步,stop, start。这些操作都是在device shell里面做的。设备会快速重启。
第三步,验证prop。getprop看看结果,然后ls一下,去logcat里看一下结果。如果结果都能对的上,那就可以继续了。
第四步,在ddms.cfg文件最后增加一行native=true并save。ddms.cfg位于c:\Users\xxx\.android目录下。
第五步,打开单独的ddms(确保eclipse没有在跑),选择Native Heap页面,点击snapshot按钮。
snapshot的过程有点慢。最后能看到每个so占用了多少内存以及百分比。
过一段时间snapshot一次就能看到每个so的趋势了。
第六步,分析。snapshot显示了分配内存的地址(记做addressA),
这个地址是RAM地址,不是so的相对地址。为了得到相对地址,
需要ps一下,找到你的pid,然后cat /proc/pid/maps,找到so的起始地址
(记做addressB)。然后拿addressA - addressB,得到相对地址,用addr2line定位到哪一处调用。
这里我还用过objdump -dS libXXX.so > XXX.dump,把so反编译出来,分析XXX.dump,
找到相对地址的调用位置
跑脚本,启动和关闭联系人 for i in `seq 10000`; do adb shell am start com.android.contacts; sleep 1; adb shell am force-stop com.android.contacts; done
第七步:snapshort current native heap usage 对比观察库文件(libhwui.so)
占用的内存是否增加不减少
转载地址:http://fswxi.baihongyu.com/