判断对象是否可回收, 有两种算法
- 引用计数法 (无法解决循环引用问题, 即两个对象互相引用, 引用计数始终不为 0, 导致无法被回收, 而实际上应该需要被回收)
GC Roots
可达性分析, 即从GC Roots
对象中根据引用能够找到该对象, 则表示对象还在使用, 不应该被回收; 而那些不能在GC Roots
中找到的对象, 认为需要被垃圾回收
GC Roots
可以是哪些对象?
- 局部变量对象
- 静态
static
字段对象 - 常量
static final
字段对象 JNI
(本地方法栈) 对象