Module java.base
Package java.lang.ref

Class SoftReference<T>

java.lang.Object
java.lang.ref.Reference<T>
java.lang.ref.SoftReference<T>
类型参数:
T - 引用对象的类型

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

假设垃圾收集器在某个时间点确定某个对象是软可达的。此时,它可以选择原子性地清除所有对该对象的软引用,以及通过一系列强引用可达到该对象的其他软可达对象的所有软引用。同时或稍后,它将对那些已清除的、已注册到引用队列中的软引用进行排队。

在虚拟机抛出OutOfMemoryError之前,所有对软可达对象的软引用都将被清除。否则,对于清除软引用的时间或对于以不同对象的一组这样的引用被清除的顺序,不会有任何约束。然而,鼓励虚拟机实现偏向于清除最近创建或最近使用的软引用。

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

自 JDK 版本:
1.2
  • Constructor Details

    • SoftReference

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

      public SoftReference(T referent, ReferenceQueue<? super T> q)
      创建一个引用给定对象的新软引用,并将其注册到给定队列。
      参数:
      referent - 新软引用将引用的对象
      q - 引用应注册的队列,如果不需要注册,则为null
  • Method Details

    • get

      public T get()
      返回此引用对象的引用对象。如果此引用对象已被程序或垃圾收集器清除,则此方法返回null
      覆盖:
      get 在类 Reference<T>
      返回:
      此引用所指的对象,如果此引用对象已被清除,则返回null
      参见: