2024年3月31日发(作者:)
Android 应用程序内存泄漏的分析
以前在学校里学习Java的时候,总是看到说,java是由垃圾收集器(GC)来管理内存回收的,
所以当时形成的观念是Java不会产生内存泄漏,我们可以只管去申请内存,不需要关注内存回收,
GC会帮我们完成。呵呵,很幼稚的想法,GC没那么聪明啊,理论及事实证明,我们的Java程序也
是会有内存泄漏的。
(一) Java内存泄漏从何而来
一般来说内存泄漏有两种情况。一种情况如在C/C++语言中的,在堆中的分配的内存,没
有将其释放,或者是在没有将其释放掉的时候,就将所有能访问这块内存的方式都删掉(如指
针重新赋值);另一种情况则是在内存对象明明已经不需要的时候,还仍然保留着这块内存和它
的访问方式(引用)。第一种情况,在Java中已经由于垃圾回收机制的引入,得到了很好的解
决。所以,Java中的内存泄漏,主要指的是第二种情况。
(二) 需要的工具
1. DDMS—Update heap Gause GC
Heap 是DDMS自带的一个很不错的内存监控工具,下图红色框中最左边的图标就是该
工具的启动按钮,它能在Heap视图中显示选中进程的当前内存使用的详细情况。下图
框中最右边的是GC工具,很多时候我们使用Heap监控内存的时候要借助GC工具,点
击一次GC按钮就相当于向VM请求了一次GC操作。中间的按钮是Dump HPROF file,它
的功能相当于给内存拍一张照,然后将这些内存信息保存到hprof文件里面,在使用我
们的第二个工具MAT的时候会使用到这个功能。
2. MAT(Memory Analyzer Tool)
Heap工具能给我们一个感性的认识,告诉我们程序当前的内存使用情况和是否存在内存
泄漏的肯能性。但是,如果我们想更详细,更深入的了解内存消耗的情况,找到问题所
在,那么我们还需要一个工具,就是MAT。这个工具是需要我们自己去下载的,可以下
载独立的MAT RCP 客户端,也可以以插件的形式安装到Eclipse里面,方便起见,推荐
后者。
安装方法:
A. 登录官网/mat/
B. 下载MAT Eclipse插件安装包(红框所示,当然你也可是选择Update Site在线安装,
个人觉得比较慢)
C. 安装
在Eclipse里面安装新软件,选择刚才下载的本地安装包进行安装
(三) 案例分析
工具准备好了,那就来看看怎么使用。我们以Q+ for Pad为例,看看查找好友功能是否存在
内存泄漏。
1. 打开 eclipse 并切换到 DDMS 透视图,同时确认 Devices 、 Heap 和 logcat 视图已经打
开了。
2. 将Pad设备链接到电脑,并确保使用“ USB 调试”模式链接
3. 启动我们的Q+ for Pad应用,此时我们能看到下图所示的情况,Q+ Pad有两个进程
4. 选中main进程,点击Update Heap按钮,再点击GC按钮,查看该进程当前堆内存的使用
情况


发布评论