• Android应用内存测试分析


    测试环境:
    版本信息:
    安装包大小:
    系统环境:OPPO R7s
    操作系统版本:4.4.4

    该文章目的:

    抛砖引玉,旨在描述和指导如何在android上测试与分析app的内存情况

    术语释义

    • 空负荷:app已经在后台运行,但是用户没有使用;
    • 中负荷:app在前台运行,用户进行了少量操作;
    • 满负荷:用户持续频繁大量操作,app接近饱和状态运行。

    一些经验:
    除了第一种情况,其它两种的主观性很强,不是很容易区分。正常产品测试的时候,只要验证后台运行(510分钟为宜)和用户持续频繁大量操作(1015分钟为宜)这两种情况下就足够了;且可以借助安卓monkey脚本辅助。

    第一步:用dumpsys meminfo 或 DDMS进行检测

    通过adb shell获取应用运行时内存

    adb shell dumpsys meminfo [$pid] or [$pkgName]
    

    图解:
    VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
    RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
    PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
    USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
    一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

    根据测试需要,一般会参考RSS和PSS,作为测试指标

    通过DDMS Dump Heap进行检测/测试

    图解:
    Heap Size:系统分配给当前应用程序的总内存。对应读内存的代码: Runtime.getRuntime().totalMemory()
    Allocated:应用程序当前占用的实际内存;
    Free:分配的内存中的空闲内存。对应读内存的代码:Runtime.getRuntime().freeMemory()
    三者之间的关系: Heap Size = Allocated + Free

    第二步:反复执行具体场景,观察Heap Size和Allocated

    • 如何判断有leak
      Heap视图中有一行数据是叫data object,即数据对象。它是我们app中大量存在的类类型的对象。 在data object中有一列 Total Size ,它的值就是当前进程中所有java对象的内存总量。 一般情况下,这个值决定是否内存泄漏。
      所以,不断的操作某个场景(比如反复提交数据,反复加载数据),Total Size的值一般会稳定在一个正常范围内。内存会有一个先增加(不断的生成对象),后下降(对象被回收)。如果程序的代码处理良好,那么内存占用量会有一个明显的回落,并且稳定在一个正常水平。内存占用量就没有一个明显的回落,并且会越来越高,那么就意味着有leak,最终出现OOM,被虚拟机kill掉程序

    第三步:利用MAT或YourKit进行分析

    此处不描述,若感兴趣自行找些资料,比如http://blog.csdn.net/feng88724/article/details/6460918

    补充--android检测内存泄漏的工具:

    LeakCanary

    参考资料
    http://blog.csdn.net/yehui928186846/article/details/51387079
    http://blog.csdn.net/feng88724/article/details/6460918
    https://my.oschina.net/yyn2010/blog/112363
    http://blog.csdn.net/duantihi/article/details/50791494
    http://gdgzzch.blog.163.com/blog/static/37640452201371483147573/
    http://hubingforever.blog.163.com/blog/static/17104057920114411313717/
    https://developer.android.com/studio/profile/heap-viewer-walkthru.html

  • 相关阅读:
    开发进度1
    人月神话阅读笔记(1)
    仓库管理系统
    课程管理系统教程
    流与文件课后作业2加解密工作
    流与文件课后作业3
    今日学习时间记录
    Java字符串切片
    java_ 集合
    json基础教程|理解Json
  • 原文地址:https://www.cnblogs.com/hailongchen/p/8605696.html
Copyright © 2020-2023  润新知