Most visited

Recently visited

Added in API level 1

SoftReference

public class SoftReference
extends Reference<T>

java.lang.Object
   ↳ java.lang.ref.Reference<T>
     ↳ java.lang.ref.SoftReference<T>


软引用对象,由垃圾回收器根据内存需求自行决定清除。

假设垃圾收集器在某个时间点确定一个对象是softly reachable 在那个时候,它可能会选择自动清除对该对象的所有软引用,以及通过一系列强引用可以访问该对象的任何其他可轻度访问的对象的所有软引用。 在同一时间或稍后时间,它将使用参考队列注册的那些新清除的软引用排入队列。

在虚拟机抛出OutOfMemoryError之前,所有对可轻松访问的对象的软引用都保证已被清除。 否则,不会对软引用将被清除的时间或者对不同对象的这种引用的集合的清除顺序进行限制。 但是,鼓励虚拟机实施偏向于清除最近创建或最近使用的软引用。

Avoid Soft References for Caching

In practice, soft references are inefficient for caching. The runtime doesn't have enough information on which references to clear and which to keep. Most fatally, it doesn't know what to do when given the choice between clearing a soft reference and growing the heap.

缺乏关于每个参考文献应用价值的信息会限制软参考文献的实用性。 过早清理的参考文献会导致不必要的工作; 那些被清除得太晚的人会浪费记忆。

大多数应用程序应该使用android.util.LruCache而不是软引用。 LruCache有一个有效的驱逐策略,并允许用户调整分配的内存量。

Summary

Public constructors

SoftReference(T referent)

创建引用给定对象的新软参考。

SoftReference(T referent, ReferenceQueue<? super T> q)

创建一个新的引用给定对象的软引用,并向给定队列注册。

Public methods

T get()

返回此引用对象的参照物。

Inherited methods

From class java.lang.ref.Reference
From class java.lang.Object

Public constructors

SoftReference

Added in API level 1
SoftReference (T referent)

创建引用给定对象的新软参考。 新的参考没有注册任何队列。

Parameters
referent T: object the new soft reference will refer to

SoftReference

Added in API level 1
SoftReference (T referent, 
                ReferenceQueue<? super T> q)

创建一个新的引用给定对象的软引用,并向给定队列注册。

Parameters
referent T: object the new soft reference will refer to
q ReferenceQueue: the queue with which the reference is to be registered, or null if registration is not required

Public methods

get

Added in API level 1
T get ()

返回此引用对象的参照物。 如果此引用对象已被程序或垃圾收集器清除,则此方法返回null

Returns
T The object to which this reference refers, or null if this reference object has been cleared

Hooray!