模块  java.base
软件包  java.lang.ref

Class SoftReference<T>


  • public class SoftReference<T>
    extends Reference<T>
    软参考对象,由垃圾收集器根据内存需求自行决定清除。 软引用通常用于实现对内存敏感的缓存。

    假设垃圾收集器在某个时间点确定对象是softly reachable 此时,它可以选择原子地清除对该对象的所有软引用以及对通过一系列强引用可从该对象到达的任何其他可轻松访问的对象的所有软引用。 在同一时间或稍后,它将使用引用队列注册的新清除的软引用排队。

    在虚拟机抛出OutOfMemoryError之前,保证已清除对软可访问对象的所有软引用。 否则,不会对清除软引用的时间或清除对不同对象的一组此类引用的顺序施加约束。 但是,鼓励虚拟机实现偏向清除最近创建或最近使用的软引用。

    此类的直接实例可用于实现简单缓存; 此类或派生的子类也可用于更大的数据结构,以实现更复杂的高速缓存。 只要软引用的引用是强可达的,即实际上是在使用中,软引用就不会被清除。 因此,复杂的高速缓存可以例如通过保持对这些条目的强烈指示来防止其最近使用的条目被丢弃,留下剩余的条目由垃圾收集器决定丢弃。

    从以下版本开始:
    1.2
    • 构造方法详细信息

      • SoftReference

        public SoftReference​(T referent)
        创建引用给定对象的新软引用。 新引用未在任何队列中注册。
        参数
        referent - 新软引用将引用的对象
      • SoftReference

        public SoftReference​(T referent,
                             ReferenceQueue<? super T> q)
        创建一个引用给定对象并在给定队列中注册的新软引用。
        参数
        referent - 新软引用将引用的对象
        q - 要注册引用的队列,如果不需要注册, null
    • 方法详细信息

      • get

        public T get()
        返回此引用对象的引用对象。 如果已通过程序或垃圾收集器清除此引用对象,则此方法返回null
        重写:
        getReference<T>
        结果
        The object to which this reference refers, or null if this reference object has been cleared