Android DDMS检测内存泄露

DDMS是Android开发包中自带工具,可以测试app性能,用于发现内存问题。

1、环境搭建

参考之前发的Android测试环境搭建相关文章,这里不再复述;

2、工具启动

虚拟机测试:

确保测试环境中已经配置了Android虚拟机,cmd下输入如下命令启动:

a、首先通过android list avd 查看建好的虚拟设备;

b、通过命令emulator @{name}启动虚拟机;

c、虚拟机启动成功后输入ddms启动测试工具;

联机测试:

如果不使用虚拟机测试的话,可以联机进行测试,需要下载Android驱动,或者使用豌豆荚也可以,安装程序也比较方便,连接前需要将手机设置成USB调试模式,cmd下可以使用adb shell命令测试连接是否成功。

连接成功后,输入ddms可以成功启动工具。

工具左侧会显示已经运行的进程;如果想查看某个进程的运行log,可以点击左下角绿色加号Add a new logcat filter,输入filter name和PID。

如果联机测试,你可能会发现手机里已经运行的被测程序,但是DDMS左侧的列表中没有显示被测程序的进程,那么别犹豫了,不是工具的问题,也不是手机配置的问题,直接让开发人员在APK中的AndroidManifest.xml文件中加上android:debuggable="true">重新打包。

3、测试应用

左侧列表选中被测进程,点击左上角Show heap updates,点击VM heap视图中Cause GC按钮,手动执行内存回收操作,会显示当前进程的内存使用详细情况。

其中data object是数据对象,data object total size是进程中所有数据对象的内存总量,这个值大小决定了是否有内存泄露。

在手机上不断操作被测应用,观察data object的total size的值,total size通常会稳定在一个范围,不断操作应用的过程中,系统会不断生成数据对象,在不断GC过程中,这些对象会被回收,total size会回落到某个特定范围。

如果应用存在内存泄露情况,data object的total size在每次GC后的值都会比前一次GC后的值要大,反复测试过程中,total size会成明显上升的趋势。由此就可以确定被测应用有内存泄露迹象。

4、MAT问题定位

发现内存问题之后,需要将heap内存信息导出来进行问题定位;点击DDMS左上角Dump HPROF file,选择位置保存;

导出来的文件需要进行格式转换才能使用MAT打开进行分析,cmd命令运行:

./hprof-conv a.hprof b.hprof

a.hprof为到出文件的名成,b.hprof为转换后的名称。

使用MAT打开b.hprof进行分析,具体分析方法下篇文章介绍。

Android DDMS检测内存泄露的更多相关文章

  1. 使用新版Android Studio检测内存泄露和性能

    内存泄露,是Android开发者最头疼的事.可能一处小小的内存泄露,都可能是毁于千里之堤的蚁穴.  怎么才能检测内存泄露呢?网上教程非常多,不过很多都是使用Eclipse检测的, 其实1.3版本以后的 ...

  2. Android Studio检测内存泄露和性能

    韩梦飞沙 yue31313 韩亚飞 han_meng_fei_sha 313134555@qq.com 首先需要明白一个概念, 内存泄露就是指,本应该回收的内存,还驻留在内存中. 一般情况下,高密度的 ...

  3. LeakCanary Android 和 Java 内存泄露检测

    说起内存泄漏还是挺让人头疼的,而且不是每个手机都会发生的情况,往往又不易察觉,那么今天我们就来介绍下LeakCanary这个工具 githup:https://github.com/square/le ...

  4. 使用LeakCanary检测内存泄露 翻译 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. 如何快速排查解决Android中的内存泄露问题

    概述 内存泄露是Android开发中比较常见的问题,一旦发生会导致大量内存空间得不到释放,可用内存急剧减少,导致运行卡顿,部分功能不可用甚至引发应用crash.对于复杂度比较高.多人协同开发的项目来讲 ...

  6. 检测内存泄露:Instruments中的Leaks

    前言 如果要检测内存泄露,我们会使用Xcode7自带的Instruments中的Leaks工具来检测. 现在的开发环境是ARC,所以很少会出现内存泄漏的情况. 不过我们一定要养好码代码的规范性. 例如 ...

  7. Qt应用中检测内存泄露——VLD

    本文简要描述一下在Qt应用中使用VLD来检测内存泄露.本次测试环境:QtCreator2.3 + Qt4.7.4-vs2008 + VS2008 Express. 1.下载并安装:VLD-2.2: h ...

  8. 查找并修复Android中的内存泄露—OutOfMemoryError

    [编者按]本文作者为来自南非约翰内斯堡的女程序员 Rebecca Franks,Rebecca 热衷于安卓开发,拥有4年安卓应用开发经验.有点完美主义者,喜爱美食. 本文系国内ITOM管理平台 One ...

  9. 在Windows中 , 如何用leakdiag “自动”检测内存泄露 (自动记录日志)

    一.基本用法 在LeakDiag中选择aaa.exe 然后选择Windows Heap Allocator来跟踪heap的使用,按start开始,等一会按log,然后再stop 会在c:\leakdi ...

随机推荐

  1. springboot系列之-profile

    Spring Boot profile用于分离不同环境的参数配置,通过spring.profile.active参数进行设置. 在Spring Boot中应用程序配置可以使用2种格式:applicat ...

  2. Socket编程基础——Socket选项

    有些情况下,我们需要对Socket行为和属性进一步控制,例如修改缓冲区大小,查看Socket状态,这就需要设置/获取Socket选项. 1.获取Socket选项int getsockopt(SOCKE ...

  3. Java-->Gson解析相较于Json

    --> Gson解析jar包:  链接:http://pan.baidu.com/s/1slCeq77 密码:f9ig --> 官方Json解析工具类: package com.drago ...

  4. Selenium定位二 --多个元素定位方法 和层级定位方法

    定位多个元素: findElements()方法可以返回一个符合条件的元素List 组 如: public void hitUpdatePersonnel(WebDriver driver, int ...

  5. ucos3的配置文件

    1,配置文件,用于系统的裁剪 均有详细的注释 为组件的开关 ​ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...

  6. 修改Apache的最大连接数

    Apache的最大连接数,默认为256个. 修改apache的最大连接数,方法如下: 一:先修改./apache/conf/httpd.conf文件. # vi httpd.conf 将“#Inclu ...

  7. OpenMP对于嵌套循环应该添加多少个parallel for 分类: OpenMP C/C++ Linux 2015-04-27 14:48 53人阅读 评论(0) 收藏

    一个原则是:应该尽量少的使用parallelfor, 因为parallel for也需要时间开销.即: (1)如果外层循环次数远远小于内层循环次数,内层循环较多时,将parallel for加在内层循 ...

  8. ipod中,写计时器倒计时界面倒计时没有更改

    innerText 改为textContent. IE.Safari.Opera和Chrome支持innerText属性.Firefox虽然不支持innerText,但支持作用类似的textConte ...

  9. IT 相关期刊

    码农周刊查阅地址: http://weekly.manong.io/issues/ 快乐码农查阅地址: http://www.codeceo.com/article/category/weekly

  10. Nginx php-fpm php mysql

    rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm ...