Android性能优化笔记(三)
【摘要】 1. 引用分类
(1)强引用: Object o = new Object ,平时用的最多的。
(2)软应用: 内存不足时回收,常用于缓存图片
(3)弱引用:不管内存是否足,都回收。GC扫描2次就回收,常用于引用activity的context。
(4)虚引用:用于跟踪GC回收的通知。
软弱引用与引用队列结合的使用场...
1. 引用分类
(1)强引用: Object o = new Object ,平时用的最多的。
(2)软应用: 内存不足时回收,常用于缓存图片
(3)弱引用:不管内存是否足,都回收。GC扫描2次就回收,常用于引用activity的context。
(4)虚引用:用于跟踪GC回收的通知。
软弱引用与引用队列结合的使用场景:
软引用和弱引用如果与一个引用队列关联起来的话,那么它们所指向的对象被回收后,引用会被保存在引用队列里。
往往通过查询引用队列中是否有值(元素为引用变量),来判断引用所指向的对象是否已被回收。
虚引用与引用队列结合的使用场景:
也会关联一个引用队列,不同的是对象再准备回收的时候,虚引用会加入队列,而不是软弱应用那样:对象被回收后
才加入到引用队列。因此虚引用往往用来处理对象将要回收 前的工作,例如资源释放等。当引用队列中的虚引用被清空时, 说明对象这次是彻底被释放了。
2. 引用计数
Object object 1 = new Object(); // new的这个对象的引用计数为1
Object object 2 = object 1; //引用计数为2
当这个对象的引用计数为0时才释放。
3. 内存泄露
3.1 原因:
所以当你把Activity的context传到另一个类或者耗时的线程里去,当Activity页面返回销毁时,这个Activity类对象并没有被回收,
它还会占用内存,因为那个线程还正在运行,并且还引用着Activity(引用计数不为0),直到线程运行结束。在这里Activity会短暂的发生内存泄露,如果这个线程是个死循环,停不下来,那么Activity页面的销毁将长时间内存泄露。
3.2 内存监测工具
未完待续。
文章来源: blog.csdn.net,作者:冉航--小虾米,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/gaoxiaoweiandy/article/details/108357224
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)