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

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

弱引用是WeakReference,如:

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

虚引用是PhantomReference,如:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

所以了解一下ReferenceQueue:

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

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

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

好,继续往下读:

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

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

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

所以总结一下:

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

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

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

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

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

接下来继续往下读:

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

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

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

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

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

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

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

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

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

相关文章:

  • 2022-12-23
  • 2021-08-01
  • 2021-09-10
  • 2021-08-17
  • 2022-02-26
  • 2021-09-06
  • 2022-01-06
猜你喜欢
  • 2022-12-23
  • 2021-10-16
  • 2021-07-12
  • 2021-10-24
  • 2021-04-22
  • 2021-11-26
相关资源
相似解决方案