博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 内存使用hprof文件打开方法
阅读量:7062 次
发布时间:2019-06-28

本文共 1174 字,大约阅读时间需要 3 分钟。

 

与C++的内存不同,C++的内存泄露是由于分配了内存给某程序但是又没有回收造成的。Java的内存泄露则是引用了一些垃圾对象,意思就是说程序引用了某些对象,但是又从来没有使用过。

Jave中的引用分为3种:
强引用:引用为空的时候,Java的垃圾回收器会处理。一般来说自己写的程序大部分都是强引用。
软引用:堆内存不够的时候,Java的垃圾回收器会处理这类引用。
弱引用:Jave的垃圾回收器每次都会回收这类引用。
如何用MAT来分析,前提是Android开发和测试的工具安装完整,SDK,Eclipse:
1.打开Eclipse
2.选择 Help->Install New Software;
3.在Work with中添加站点:(这个地址可能会变化,但是新的地址可以在官方网站上找到: )
4.生成.hprof文件:插入SD卡(Android机器很多程序都需要插入SD卡),并将设备连接到PC,在Eclipse中的DDMS中选择要测试的进程,然后点击Update Heap 和Dump HPROF file两个Button。
.hprof 文件会自动保存在SD卡上,把 .hprof 文件拷贝到PC上的\ android-sdk-windows\tools目录下。这个由DDMS生成的文件不能直接在MAT打开,需要转换。
运行cmd打开命令行,cd到\ android-sdk-windows\tools所在目录,并输入命令hprof-conv xxxxx.hprof yyyyy.hprof,其中xxxxx.hprof为原始文件,yyyyy.hprof为转换过后的文件。转换过后的文件自动放在android-sdk-windows\tools 目录下。
OK,到此为止,.hprof文件处理完毕,可以用来分析内存泄露情况了。
5.打开MAT:
在Eclipse中点击Windows->Open Perspective->Other->Memory Analysis
6.导入.hprof文件
在MAT中点击 File->Open File,浏览到刚刚转换而得到的.hprof文件,并Cancel掉自动生成报告,点击Dominator Tree,并按Package分组,选择自己所定义的Package 类点右键,在弹出菜单中选择List objects->With incoming references。

这时会列出所有可疑类,右键点击某一项,并选择Path to GC Roots->exclude weak/soft references,会进一步筛选出跟程序相关的所有有内存泄露的类。据此,可以追踪到代码中的某一个产生泄露的类。

转载于:https://www.cnblogs.com/onelikeone/p/7116322.html

你可能感兴趣的文章
如何在Sharepoint Online中创建调查问卷
查看>>
Exchange 2013公网证书配置
查看>>
安装win7系统后不小心重新分区了,别的盘的数据怎么找回
查看>>
Spring学习-day13
查看>>
一看就能学会的H5视频推流方案
查看>>
Spring和SpringMVC的区别
查看>>
学生登录管理系统
查看>>
Linux的浏览器中等宽字体显示不正常的问题
查看>>
【Ansible】 Playbook 中的变量和引用
查看>>
仓库常需要对货品和数据记录
查看>>
使用c++实现乘法表输出
查看>>
100个常用的linux命令
查看>>
我的友情链接
查看>>
每天laravel-20160817| Container -20
查看>>
通用权限管理框架
查看>>
我的友情链接
查看>>
申请SSL证书怎样验证域名所有权
查看>>
Java开发在线打开编辑保存Word文件
查看>>
将学习进行到底!为普通人的奋斗送福
查看>>
常用十大python机器学习库
查看>>