zoukankan      html  css  js  c++  java
  • 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的一个成员变量,如下:

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

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

  • 相关阅读:
    转载:人家编写的程序:「雀神 AI」Suphx
    一千六百万单表建联合索引对查询效率的提升
    索引对单列极值查询的显著性影响(百万级别表单列最值查询 Cost由1405变成3)
    经典SQL问题:Top 10%
    区间查询与等效minus查询
    『科学计算』L0、L1与L2范数_理解
    『Python』__getattr__()特殊方法
    『Json』常用方法记录
    『Pickle』数据结构持久化模块_常用方法记录
    『Re』知识工程作业_主体识别
  • 原文地址:https://www.cnblogs.com/webor2006/p/12105080.html
Copyright © 2011-2022 走看看