Java四种引用类型+ReferenceQueue+WeakHashMap

Summary

JDK1.2以前只提供一种引用类型——强引用:Object obj = new Object(); 。而JDK1.2以后多出的三个选择分别是:

  • 软引用 java.lang.ref.SoftReference;
  • 弱引用 java.lang.ref.WeakReference;
  • 虚引用 java.lang.ref.PhantomReference

强引用

最常用的引用类型,如Object obj = new Object(); 。只要强引用存在则GC时则必定不被回收。

软引用

用于描述还有用但非必须的对象,当堆将发生OOM(Out Of Memory)时则会回收软引用所指向的内存空间,若回收后依然空间不足才会抛出 OOM 。一般用于实现内存敏感的高速缓存。

弱引用

发生GC时必定回收弱引用指向的内存空间。

虚引用

又称为幽灵引用或幻影引用,虚引用既不会影响对象的生命周期,也无法通过虚引用来获取对象实例,仅用于在发生GC时接收一个系统通知。

那么问题来了,若一个对象的引用类型有多个,如何判断它的可达性呢?其实规则如下:

  1. 单条引用链的可达性以最弱的一个引用类型来决定;
  2. 多条引用链的可达性以最强的一个引用类型来决定;

References

原文地址:https://www.cnblogs.com/wondertwo/p/5852992.html