- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
android 手机性能测试
测试工具 DDM(S Dalvik Debug Monitor Service )
安装与配置
1、 首先安装 JDK,1.5 以上的版本(目前 java vuser 不支持 JDK1.7 )
2、 在安装完 JDK 后,就需要下载及安装 Android SDK ,即: android-sdk-windows ,压缩
包大约有 551M左右
3、 解压缩 android-sdk-windows ,放在 C盘的根目录下,配置系统变量 path 的值为: C:
\android-sdk-windows\tools
启动 DDMS
1、 可以在开始 -- 运行中进入 DDMS
2、 也可以在 C: \android-sdk-windows\tools 目录下启动 ddms.bat
连接 DDMS
1、 使用数据线连接安卓系统的手机,确认手机是处于“ USB 调试”模式。
a) 在手机上按下“ Menu”键,在弹出的菜单中选择“ Setting (设置)”;
b) 选择“应用程序”;
c) 在此界面勾选“未知来源”,然后选择“开发”;
d) 勾选“USB调试”,“保持唤醒状态”;
2、 在 ddms的左边框中会显示手机已经打开的应用程序 (APP)进程,如果不显示,可以多连
接几次,或者换个手机试
操作 DDMS
1、 点击选中想要监测的进程,比如 system_process 进程;
2、 点击选中 Devices 视图界面中最上方一排图标中的“ Update Heap”图标;
3、 点击 Heap视图中的“ Cause GC”按钮;
4、 此时在 Heap视图中就会看到当前选中的进程的内存使用量的详细情况。
分析 DDMS
如何才能知道我们的程序是否有内存泄漏的可能性呢。这里需要注意一个值: Heap视图中
部有一个 Type 叫做 data object ,即数据对象,也就是我们的程序中大量存在的类类型的
对象。在 data object 一行中有一列是“ Total Size ”,其值就是当前进程中所有 Java 数
据对象的内存总量,一般情况下,这个值的大小决定了是否会有内存泄漏。可以这样判断:
1、 不断的操作当前应用,同时注意观察 data object 的 Total Size 值;
2、 正常情况下 Total Size 值都会稳定在一个有限的范围内,也就是说由于程序中的的代
码良好,没有造成对象不被垃圾回收的情况,所以说虽然我们不断的操作会不断的生成
很多对象,而在虚拟机不断的进行 G C的过程中,这些对象都被回收了,内存占用量会
会落到一个稳定的水平;
3、 反之如果代码中存在没有释放对象引用的情况,则 data object 的 Total Size 值在每
次 GC后不会有明显的回落,随着操作次数的增多 Total Size 的值会越来越大,直到到
达一个上限后导致进程被 kill 掉。
4、 此处已 system_process 进程为例, 在我的测试环境中 system_process 进程所占用的内
存的 data object 的 Total Size 正常情况下会稳定在 2.2~2.8 之间,而当其值超过 3.
55 后进程就会被 kill 掉
Android 程序的内存泄漏与规避方法
造成 Android 应用程序内存泄漏的原因
1、引用没释放造成的内存泄露
a) 注册没有取消造成的内存泄漏
这种 Android 的内存泄露比纯 Java 的内存泄漏还要严重,因为其他一些 Android
程序可能引用系统的 Android 程序的对象 ( 比如注册机制 ) 。即使 Android 程序已经
结束了, 但是别的应用程序仍然还有对 Android 程序的某个对象的引用, 泄漏的内
存依然不能被垃圾回收。
b) 集合中对象没有关闭造成的内存泄漏
通常把一些对象的引用加入到了集合中, 当我们不需要该对象时, 并没有把它的引
用从集合中清理掉, 慢慢地这个集合就会越来越大。 如果这个集合是静态的话, 那
情况就会更严重。
2、资源对象没有关闭造成的内存泄漏
资源对象比如 Cursor 、File 文件等往往都用了一些缓冲,在不使用的时候应该及时关
闭它们,以便它们的缓冲及时回收内存。这些缓冲不仅存在于 Java 虚拟机内,还存在
于 Java 虚拟机外,如果仅仅是把它的引用设置为空 , 而不关闭它们,那么往往会造成内
存泄漏。
3、一些不良代码造成的内存压力原因如下:
c) Bitmap 没有调用 recycle( ) ;
d) 构造 Adapter 时,没有使用缓存的 convertView ;
e) ThreadLocal 使用不当;
内存泄漏的检测及定位
1、内存泄漏的检
文档评论(0)