Mat工具查看内存泄露和内存溢出情况

首先需要去下一个MAT工具。地址如下: http://download.eclipse.org/mat/1.5/update-site/ 安装好了工具之后就需要我们去实现查找内存泄露的原因了.
在进入DDMS页面时候会出现下图中三个按钮:需要选择我们的程序包名对应工程:如,com.authentication.activity.在选择了这个项目之后需要点击下图的
向上两个按钮,然后点击向下的按钮。等一会儿之后就出现了内存的报告。


如下图是一个整体的报告:
这个报告中会说明我们的内存泄露的原因多半是什么情况,但后不能追踪我们内存泄露的原有是什么。
这时候我们可以专门选择SQL语句去查找我们的Activity对象,看Activity对象有什么引用和Activity被谁引用。
点击如上图按钮之后就出现下面界面:


输入查询语句如下:Select * from instanceof android.app.Activity,然后点击红色的感叹号。
查找所有的工程Activity对象:如下显示:




我们会发现一个叫OutSationHXUFActivity没有被回收,多次创建但后最后却没有回收。所以我们有理由相信在 OutSationHXUFActivity中对对象被强引用,或者说是被什么对象挟持了。这时候可以选择

右键选择然后第一个List Object,会出现incoming和Outcoming也就是内部引用和外部引用,然后进去找。就可以找到为什么会被挟持了。


Android中内存是比较小的,在开发过程中注意有的内存必须及时释放回收,
1.我们需要注意的就是Static这个关键字,凡事被Static修饰的类或者方法都需要格外注意。因为Static会一直保存在那。如果网Static修饰的list里面添加对象,那么最后list会慢慢变大,最后导致内存溢出
2.是我们需要注意Android中大胖子bitmap,这东西也是很容易内存溢出。在使用完了之后就及时释放回收,回收的代码如下:
    if(bitmap != null && !bitmap.isRecycled()){    
                bitmap.recycle();    
                bitmap = null;    
            }   
            System.gc();   
   System. gc (); 的意识是通知系统回收垃圾。
3.在碰到流啊,数据库游标啊,记得在destroy方法时候关闭。或者说是在使用完了之后就关闭。
4.我们可以在配置文件中变大内存值:如果机型比较老,像我们项目用的版本机型是4.1.2是比较古老的安卓系统,所以在  
Application中配置为largeHeap为true.

Android中heapsize是内存占用值,Shallow Heap是这个对象占用内存值,Retained heap是引用加上自身的内存占用值。
最后内存问题大家自己看着找。。。。。。。。。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值