• Android内存分配分配机制


    移动应用测试已经在做了一年多了,想更深层次的提升自己。所以研究下Android深层次的东西,记录下来,以备将来之需。所以本文由引用网络上的一些东西,拿来主义还是我很赞同的一种方式。另外因为目前没有对Ios进行深入的研究,所以目前的研究方向只是在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事件发生了也不能确定是内存泄露。
  • 相关阅读:
    接口限流算法小记
    mac下操作小记
    Java代理(静态代理、JDK动态代理、CGLIB动态代理)
    关系数据库(RDBMS)小记
    Socket端口复用
    SSH使用小记
    HTTP缓存及其使用
    关于浏览器跨域访问(同源策略)
    awk入门教程
    链路追踪工具之Zipkin学习小记
  • 原文地址:https://www.cnblogs.com/kevinqinan/p/3755318.html
Copyright © 2020-2023  润新知