又叫根搜索算法/追踪性垃圾收集<br>
有效解决在引用计数算法中循环引用的问题,防止内存泄漏
基本思路
以根对象集合(GC Roots)为起始点,按照从上至下的方式<font color="#ff0000">搜索被根对象集合所连接的目标对象是否可达</font><br>
使用可达性分析算法后,内存中的存活对象都会被根对象集合直接或间接连接着,搜索所走过的路径成为<font color="#ff0000">引用链</font>
如果目标对象没有任何引用链相连,则是不可达的,意味着该对象已经死亡,可以标记为垃圾对象
在可达性分析算法中,只有能够被根对象集合直接或间接连接的对象才是存活对象
GC Roots<br>
虚拟机栈(栈帧中的本地变量表)中引用的对象<br>
本地方法栈内JNI(通常说的本地方法)引用的对象<br>
方法区中类静态属性引用的对象
方法区中常量引用的对象
所有被同步锁synchronized持有的对象
java虚拟机内部的引用
除了以上固定集合,还可以有其他对象“临时性”加入<br>
如分代收集和局部回收
小技巧:
由于Root采用栈方式存放变量和指针,所以如果一个指针,它保存了堆内存里面的对象,但是自己又不存放在堆内存里面,那它就是一个Root