通过Provider、sysinfo监控查看内存泄漏的机制会有一些利弊,并不能很准确的反应出相对应的memory的变化,更愿意选择通过dumpsys meminfo去check具体进程的memory变化情况,而且dumsys信息也会更全面、更利于整体把控相关问题点。
一、Profiler VS dumpsys
dumpsys memory拿到的信息量以及可监控的进程量是远远多于Profiler,有的问题可以通过dumpsys发现,有的问题通过Profiler就可能是误判。
Profiler实时监控的memory情况:
dumpsys监控下的memory情况:
二、 dumpsys meminfo正常、异常数据对比
正常数据:
异常数据:
三、展讯平台malloc异常追踪
不同的平台都有一定的对malloc申请与释放追踪的机制,以下以展锐平台为例,配置好追踪malloc的backtrace之后,在复现内存泄漏的设备下dump native heap信息,用平台development里面相关的脚本进行解析即可得到以下堆积malloc堆栈的lib信息。
总结
其实Android内存相关的问题并不仅仅是内存泄露的问题,在项目中还曾经遇到过动态申请的堆空间异常导致程序用到这一堆栈时出现崩溃的问题,之前同一个项目中俩个不同的算法同时遇到了类似的问题,这个问题最后虽然用提前申请malloc空间的方案解决了,但是作为研发,感觉真的有必要更深层次的研究这些问题背后到底发生了什么,不过这个问题的研究可能会被delay。