可达性分析(RA)算法
RA基本思想:通过一系列的成为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。
在Java语言中,可作为GC Roots的对象包括下面几种:
1、虚拟机栈中引用的对象
2、方法区中类静态属性引用的对象
3、方法区中常量引用的对象
4、本地方法栈中Native方法引用的对象。
引用分为4种:
1、强引用,在程序代码中普遍存在,类似 "Object obj=new Object()",只要强引用还存在,垃圾收集器永远不会回收掉被引用的对象。
2、软引用,用来描述一些还有用但非必需的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。
3、弱引用,用来描述非必需对象的,强度比软引用弱,被弱引用关联的对象只能生存到下一次垃圾收集发生之前。
4、虚引用,也称幽灵引用或者幻影引用,是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚拟引用来取得一个对象实例。