移动应用测试已经在作了一年多了,想更深层次的提高本身。因此研究下Android深层次的东西,记录下来,以备未来之需。因此本文由引用网络上的一些东西,拿来主义仍是我很赞同的一种方式。另外由于目前没有对Ios进行深刻的研究,因此目前的研究方向只是在Android方向。android
内存泄露能够算是移动应用测试中比较难测试,隐藏较深的问题类型之一。要想理解如何分析,必须先要从根上走起,这里提升的根就是Android的内存分配机制。因此先从这个根基出发。
1. 机制
根据以前的测试经验发现,其实Android系统会对不在使用的进程,进行回收,也就是kill掉一些进程来获取更多的内存。
上网查询了资料发现,这是android 系统的一个内存管理机制。被称为Low Memorry Killer的一种管理机制。
2. 处理逻辑
Low Memorry Killer的机制主要是经过进程的oom_adj来进行内存的处理的。下面是从网上截取的一段代码,是来自于Android内核的一些东西
FOREGROUD_APP |
0 |
VISIBLE_APP |
1 |
SECONDARY_SERVER
BACKUP_APP
|
2 |
HOME_APP |
4 |
HIDDEN_APP |
7 |
CONTENT_PROVIDER |
14 |
EMPTY_APP |
15 |
在这个表中,前面表明的是程序重要性的名称,后面的数字表明的com_adj的数值分配,固然了,越小的值表明程序越重要,被Kill的可能性也就更小。
固然在代码中还存在着其余的对应关系,以下
0 |
1536 |
1 |
2048 |
2 |
4096 |
4 |
4096 |
7 |
5120 |
14 |
5632 |
15 |
6144 |
这里其实算出来的是一个阀值,阀值的意思是当手机内存小于阀值的状况下,内存就会开始逐级回收该类型的内存了。好比说15 级别是 6144 * 4K = 24 M,即当手机内存小于24M的时候开始回收15级别的应用的内存。
写在最后的话:
分析完了Android的这套机制以后,得出几个结论:
1. 若是要作内存泄露测试,只能靠观察,猜想,
2. 内存测试最好是在小内存的手机上测试。这样比较容易实现kill的条件。可是即使kill事件发生了也不能肯定是内存泄露。