GC回收机制

线程私有数据不需要考虑,会随着线程结束而结束,垃圾收集器关注的是堆和方法区中动态创建对象

1、可达性分析

通过一组GC Root为起点向下探索,探索的路径为引用连,最终根据引用连是否可达判断是否可以被回收

GC Root对象 

1.1 虚拟机栈局部变量表中引用的对象

1.2 方法区中静态引用指向的对象

1.3 仍处于存活状态中的线程对象

1.4 Native方法中JNI引用的对象

2、什么时候会回收

2.1 Allocation Failure 堆内存分配时剩余空间不足

2.2 System.gc(); 会出发垃圾回收

3、如何回收垃圾

各个厂商回收算法不同

遍历标记算法 、复制算法、复制压缩算法各有优缺点 

从GC Root集合开始遍历一次 未引用的对象会被回收

过程分为标记阶段和清除阶段

4、JVM分代回收策略

新生代、老生代(HotSpot 还有永久代)

新创建的对象在新生代,新生代多次回收仍然存活就会被分到老年代

5、引用

由强到弱分为 强引用 (new Obj())、软引用(SoftReference)、弱引用>、虚引用(用不到)

android项目中用到图片(Bitmap)处理时会用到软引用

软引用自身是强引用 引用的对象是软引用

你可能感兴趣的:(GC回收机制)