在分析Android内存泄漏之前,先了解一下JAVA的一些知识
1. JAVA中的对象的创建
使用new指令生成对象时,堆内存将会为此开辟一份空间存放该对象
垃圾回收器回收非存活的对象,并释放对应的内存空间
2.Java如何判定对象存活或死亡?
可达性分析算法
1给对象中添加一个引用计数,假如为count
2当引用这个对象时:count++
3当count==0时:对象处于,也就是说没有其它地方在引用这个对象了,对象就处于“死亡”状态,回收对象可达性分析算法
举个例子:像找人一样,A认识B,B认识C,C认识D,那么A就要吧通过这样的关系认识D,如果能找到D,说明D对象是存活的,不能回收,如果通过所有的关系都找不到D,说明D是“死亡”的,回收D对象。
可达性分析算法的定义:通过一系列的称为 GC
Roots 的对象作为起点,从这些节点开始向下搜索,搜索把走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连(就是从GC Roots 到这个对象不可达)时,则证明此对象是不可用的。如下图,Object5,Object6,Object7就是不可达对象,是要被回收的对象
问:哪些对象可以作为GC Roots对象呢?
1虚拟机栈中引用的对象
2方法区中类静态属性引用的对象
3方法区中常量引用的对象
4本地方法栈中JNI引用的对象
延伸阅读
- ssh框架 2016-09-30
- 阿里移动安全 [无线安全]玩转无线电——不安全的蓝牙锁 2017-07-26
- 消息队列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 论文笔记【图片目标分割】 2017-07-26
- 词向量-LRWE模型-更好地识别反义词同义词 2017-07-26
- 从栈不平衡问题 理解 calling convention 2017-07-26
- php imagemagick 处理 图片剪切、压缩、合并、插入文本、背景色透明 2017-07-26
- Swift实现JSON转Model - HandyJSON使用讲解 2017-07-26
- 阿里移动安全 Android端恶意锁屏勒索应用分析 2017-07-26
- 集合结合数据结构来看看(二) 2017-07-26