检测对象是否已经被引用
在进行垃圾回收之前,首先要确定对象是否已经引用。
1. 引用计数算法
思路是给对象添加一个引用计数器,每当有引用则计数器加1,当引用失效时则计数器减1。计数器为0的对象就是不可能在被引用的。
Java虚拟机没有使用这种算法,因为它很难解决对象之间循环引用的问题。
2. 可达性分析算法
以GC Roots为起点向下搜索,当一个对象到GC Roots没有任何引用链相连,则判定对象是可回收的。
可作为GC Roots的对象有:
- 虚拟机栈中引用的对象
- 方法区中类静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI(Native方法)引用的对象