Android memory leakage

android 内存泄露:

===========================

程序申请一块内存,但没有指针指向这块内存,内存就不能使用被泄露

dalvik虚拟机内存堆大小一般为16M,最大24M,超出则outOfMemory。

如果长时间保持大资源文件context的引用或者保存了多个耗用内存过大的资源(bitmap等),就容易造成内存泄露;


android内存回收:

===========================

基于java的内存回收机制,有向图,如果从根节点开始找不到对象,对象的引用计数器为0,就回收内存;

                                ====创建====可达状态=====

                                                 失去   ||    ||重新

                                                引用    ||    ||引用

                                                            ||

                                          =====可恢复状态======

                                                彻底     |    失去

                                                   引      |    用

                                          =====不可达状态====

                                                             |

                                                             |                 =========

                                                             |————||垃圾回收

                                                                              ==========

1.回收实现细节

如果考虑到磁盘碎片:Compacting算法的收集器的实现中,一般增加句柄和句柄表。(先将对象移动到堆的一端,重新刷新对象的引用)

stop-and-copy算法:它将堆分成对象面和空闲区域面在对象面与空闲区域面的切换过程中,程序暂停执行,克服句柄的开销和解决堆碎片的垃圾回收

2.避免内存泄露

对象不使用时即时free;

图片缩放过程中常常占用比自身大的内存,易泄露;

一个对象在多处被引用时只有一处free是会回收失败的;

大资源文件的引用特别要注意不要同时引用多个;

查询数据库后没有关闭游标cursor ,尽可能的将一些静态的对象(尤其是集合对象),放于SQLite数据库中,要尽量使用sql语句来处理;

注意static关键字定义的变量引用的对象,注意变量的生命周期;

3.内存泄露的调试方法

1.  通过DDMS中的heap工具,生成hprof文件去发现是否有内存溢出

2.  通过内存分析工具 MAT(Memory Analyzer Tool),找到内存泄露的对象

4.内存泄露分析参考资料:

http://hubingforever.blog.163.com/blog/static/171040579201142010757755/

http://blog.csdn.net/hudashi/article/details/7050892

http://hubingforever.blog.163.com/blog/static/17104057920113252542215/



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值