在“【Android】Android性能测试之DDMS“一文中,介绍了通过DDMS来监测我们的内存使用情况。但是,DDMS的Heap视图,也仅仅显示了一个统计结果,对于哪些类哪些对象造成了内存的占用不释放,我们不可知!本文介绍一个更加强大的内存测试工具MAT。

MAT下载地址:http://www.eclipse.org/mat/downloads.php

我们这里使用MAT的Eclipse插件:http://download.eclipse.org/mat/1.3.1/update-site,为我们的Eclipse安装这个插件吧。(安装过程略,不会安装插件的朋友请Google)

同样是打开DDMS视图,在设备列表中先中要测试的应用程序,点击"Dump HPROF file"小图标,如下图:



Eclipse会为我们生成HPROF的内存描述文件,因为,我们安装了MAT插件,所以,它会同时打开MAT的界面,如下图:



中间的大饼图,显示了我们的内存中存被哪些大对象占据着。其中,灰白那块表示空闲的内存。

重点关注左下角Actions那栏的Dominator Tree。点击Dominator Tree,进入以下视图:



我们按Retained Heap列进行排序,排在前面的就是占用最大内存的对象。可以看到,我们应用中自定义的XxxxApplication占用了比较大的内存。我们点击它左边的小三角形,一级一级展开来,看看到底是具体哪些类的对象占用了这么大的内存。如下图:



最终,我们可以查出内存占用高而不释放的原因:里面存储大量的Hashmap对象(里面存MsgBean列表),而这些HashMap对象一直没有释放,导致App挂在后台很久后,越积越多。因为手机硬件配置比较高,所以,App挂在后台很久没有被Kill掉。不过,要保持良好的资源释放的习惯,这个很有必要。

上面所说的Actions栏中,除了Dominator Tree外,还有Histogram、Top Consumers、Duplicate Classes,它们分别以不同的方式,展现了内存的使用情况。在这里就不再一一分析。

找出性能问题,想办法修正它!这个很重要!


@容新华技术博客 - http://blog.csdn.net/rongxinhua - 原创文章,转载请注明出处


更多相关文章

  1. 让Android的WebView支持WebSocket
  2. android中sqlite操作
  3. 浅谈Android引用计数(2)
  4. android其实很简单--内存相关
  5. 程序员挑战高薪,你必须会的十大面试题《一》
  6. 用volley从网页获取json数据
  7. Android(安卓)TwoLineListItem
  8. 从源码看ANDROID中SQLITE是怎么通过CURSORWINDOW读DB的
  9. 跟着官方学习Android(安卓)— Services

随机推荐

  1. Android直播推流学习
  2. Windows环境下Android(安卓)NDK环境搭建
  3. android中layout_gravity和gravity的区别
  4. Android(安卓)Studio代码调试大全
  5. 还在用枚举?我早就抛弃了!(Android(安卓)注
  6. Android2.1烧入mini2440
  7. iPhone和Android
  8. 《Android(安卓)4 高级编程(第3版)》试读
  9. Android(安卓)数字签名
  10. android的消息处理机制