垃圾回收的可达性分析与引用类型
垃圾回收的可达性分析与引用类型
可达性分析
通过”GC Roots”向下搜索,搜索路径称为引用链。不在引用链上的对象可回收。
GC Roots对象
- 虚拟机栈中引用的对象
- 方法区中静态属性引用的对象
- 方法区中常量引用的对象
- 本地方法栈中JNI引用的对象
引用类型
强引用
1 | Object obj = new Object(); // 永远不会被回收 |
软引用
1 | SoftReference<Object> ref = new SoftReference<>(new Object()); |
弱引用
1 | WeakReference<Object> ref = new WeakReference<>(new Object()); |
虚引用
1 | PhantomReference<Object> ref = new PhantomReference<>(new Object(), queue); |
finalize方法
- 对象覆写finalize()
- 第一次GC时调用
- 可拯救自己(重新引用)
总结
可达性分析是垃圾回收的基础算法,引用类型决定了对象的回收时机。