Reference的四种状态转换关系分析

在上一次https://www.cnblogs.com/webor2006/p/12076960.html中对于四大引用的强引用进行了学习,接下来三种引用分别是软引用(soft reference)、弱引用(weak reference)、虚引用(phantom reference),而引用的力度是从强到弱,在日常开发中这三种可能用得较少一些,这三种引用其实都对应一个Java类,软引用是SoftReference,如:

弱引用是WeakReference,如:

虚引用是PhantomReference,如:

而它们三个都是继承至Reference,瞅一下:

那下面来通过它的javadoc对其进行一个全面的了解:

那为啥不能被继承呢?下面看一下它的构造方法的定义就晓得了:

所以我们可以看到我们要研究的三大引用都是跟它在同一个包中的:

 

好,接下来则会看到对于Reference类的一个非常详细的说明:

接下来对它进行一个详细的阅读,里面提供了很多的信息:

以上这些信息如果不读官方文档还真的不太清楚,只知道四大引用是啥,然后它们起着啥作用,所以翻看官方文档得到的信息确实是最全面的,好,下面针对这四种状态再来细看一下:

其中里面谈到了referent和引用队列,其实是定义成了相关变量,如下:

所以了解一下ReferenceQueue:

其中可以看到Reference的有一个构造方法就提供有ReferenceQueue,如下:

好,继续往下读:

所以总结一下:

Reference实例的4种状态:Active, Pedding , Enqueued, Inactive:

Active:新创建的引用实例都会处于Active状态。

Pending:未被注册到引用队列中的引用对象不可能处于该状态之下。

Enqueued:未被注册到引用队列中的引用对象不可能处于该状态之下。

Inactive:无法对该状态的引用对象执行任何操作,处于该状态下的对象状态不会再发生任何变化。

接下来继续往下读:

这里提到了一个next,其实它是在Reference的一个成员变量,如下:

下面来看一下它的状态的情况:

好,剩下的待下次再来分析。

posted on 2019-12-26 23:18  cexo  阅读(778)  评论(0编辑  收藏  举报

导航