heap的使用
ddms中有一个heap工具
可以帮我们检查代码中哪里有内存泄漏的地方
步骤
1.打开eclipse,切换到ddms视图,打开devices和heap视图
2.选中想要监测的进程,比如system_process进程
3.点击Devices视图界面最上面的Update Heap这个图标
4.点击Heap视图里面的CauseGC按钮
5.然后就可以看到Heap视图里面的进程的内存使用情况
说明:
1.点CauseGC就相当于向虚拟机请求了一次gc操作
2.点一次就行了,之后Heap界面会定时刷新,然后就可以看到内存使用情况的变化
判断
怎么知道我们的程序有没有内存泄漏
我们就注意Heap里面的有一个Type,叫做data object,就是数据对象
这个就是我们程序里面大量的类的的对象
data object里面有一列是Total size,
就是当前进程中所有的java数据对象的内存总量
一般情况下,这个值的大小就反映了有没有内存泄漏
我们可以这样判断:
1.不停地操作应用,然后我们观察data object的Total size的值
2.正常情况下,totalsize是会稳定在一个有限的范围里面的
也就是说代码如果是良好的,那么垃圾回收情况也是良好的,那么内存占用量就比较稳定
3.如果有内存泄漏的情况,那么data object的totalsize值在每次gc后不会有明显的回落
然后随着操作次数越来越多,totalsize值也就越来越大了
到达一定的上限的时候,内存溢出了,然后进程就被kill了
举例
这里我举个例子,我以system_process进程为例子
在我现在的测试环境下,system_process进程占用的内存的data object的totalsize
大概稳定在2.2到2.8之间
如果超过3.55,进程就会被kill掉
所以ddms的heap视图工具可以很方便确认我们的程序是否存在内存泄漏的可能性