zoukankan      html  css  js  c++  java
  • DDMS Heap分析内存泄露之实例

    最近在研究Android的内存使用的一些情况,用来分析是否在移动应用中存在内存泄露的问题。现以自己的应用,分析下如何使用DDMS来分析。

    我是根据网上的一些博客进行的分析,可能会有雷同,只为记录下来以后查看。
    1. 安装:
    这部分东西都不再讲了,Java环境,Android环境,Eclipse环境都配好的情况下。
    2. 手机
    这部分也不用考虑了,我用的小米,也没有考虑是否有过root,应该无所谓的,调试开启是必须的。连接电脑,打开Eclipse。
    3. 使用DDMS:
    • 启动Eclipse之后,必须要切换到DDMS视图下,同时打开Device视图。
    • 手机启动某个需要测试的App,在Eclipse的Device中选中App所启动的进程
    • 选中该进程之后,点击Heap视图下的updated heap 按钮,我认为update的概念就是启动对我们需要测试的进程的检测程序
    • 选中该按钮之后,点击Cause GC按钮,我认为点击该按钮就是请求我们要测试的进程的数据。当然请求一次之后就不用再次点击该按钮了,因为Heap会刷新页面,来显示当前的内存的变化。
    总的情况还是去图上找吧。
    4.分析数据:
    DDMS 中使用Heap视图来分析的话,基本上就查看1个数据
    在Data object 中有叫Total Size的数据。具体的含义就是当前进程中Java的对象所占用的内存总量。
    5.判断依据:
    一般情况下我的分析是这样的:
      a.不断在手机上操作一个功能,如果该数据在不断地增加,则判定该功能模块存在内存泄露问题。
      b.如果反复操作该功能之后,有一定范围的起伏,但是又被稳定在某一个有限的范围内,则说明代码良好。
      C.如果有效内存手机,可能会出现程序被kill,但是程序被kill并不能代表程序一定有内存泄露。
     
    实战分析:
    动作:只是点击App上的查看相册的功能,点击返回,算一次动作。
    如图所知在18次点击事件的同时,内存是随着点击次数,只增不减的不断增加,并且在第18次的时候很给力的程序崩溃掉了。
    所以可以判定该功能是有很大可能存在内存泄露的。
     
    注:
    更多的时候并没有完全像例子中这么明显的内存泄露问题的,所以更多的时候,做内存泄露测试的时候,最好不要局限于一种方式,可以尝试不同的方式来验证我们的想法是否正确。
  • 相关阅读:
    PAT 顶级 1010 Lehmer Code (35 分)
    PAT 顶级 1010 Lehmer Code (35 分)
    CCF CSP 201909-4 推荐系统
    CCF CSP 201909-4 推荐系统
    Codeforces 1251C Minimize The Integer
    Codeforces 1251C Minimize The Integer
    CCF CSP 201803-4 棋局评估
    CCF CSP 201803-4 棋局评估
    【DP_树形DP专题】题单总结
    【DP_树形DP专题】题单总结
  • 原文地址:https://www.cnblogs.com/kevinqinan/p/3755328.html
Copyright © 2011-2022 走看看