垃圾回收的可达性分析与引用类型

垃圾回收的可达性分析与引用类型

可达性分析

通过”GC Roots”向下搜索,搜索路径称为引用链。不在引用链上的对象可回收。

GC Roots对象

  • 虚拟机栈中引用的对象
  • 方法区中静态属性引用的对象
  • 方法区中常量引用的对象
  • 本地方法栈中JNI引用的对象

引用类型

强引用

1
Object obj = new Object(); // 永远不会被回收

软引用

1
2
SoftReference<Object> ref = new SoftReference<>(new Object());
// 内存不足时回收

弱引用

1
2
WeakReference<Object> ref = new WeakReference<>(new Object());
// 下次GC时回收

虚引用

1
2
PhantomReference<Object> ref = new PhantomReference<>(new Object(), queue);
// 随时可能被回收

finalize方法

  • 对象覆写finalize()
  • 第一次GC时调用
  • 可拯救自己(重新引用)

总结

可达性分析是垃圾回收的基础算法,引用类型决定了对象的回收时机。