/** Copyright (c) 1997, 2003, Oracle and/or its affiliates. All rights reserved.* ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.*********************/package java.lang.ref;/*** Soft reference objects, which are cleared at the discretion of the garbage* collector in response to memory demand. Soft references are most often used* to implement memory-sensitive caches.** <p> Suppose that the garbage collector determines at a certain point in time* that an object is <a href="package-summary.html#reachability">softly* reachable</a>. At that time it may choose to clear atomically all soft* references to that object and all soft references to any other* softly-reachable objects from which that object is reachable through a chain* of strong references. At the same time or at some later time it will* enqueue those newly-cleared soft references that are registered with* reference queues.** <p> All soft references to softly-reachable objects are guaranteed to have* been cleared before the virtual machine throws an* {@code OutOfMemoryError}. Otherwise no constraints are placed upon the* time at which a soft reference will be cleared or the order in which a set* of such references to different objects will be cleared. Virtual machine* implementations are, however, encouraged to bias against clearing* recently-created or recently-used soft references.** <p> Direct instances of this class may be used to implement simple caches;* this class or derived subclasses may also be used in larger data structures* to implement more sophisticated caches. As long as the referent of a soft* reference is strongly reachable, that is, is actually in use, the soft* reference will not be cleared. Thus a sophisticated cache can, for example,* prevent its most recently used entries from being discarded by keeping* strong referents to those entries, leaving the remaining entries to be* discarded at the discretion of the garbage collector.** @author Mark Reinhold* @since 1.2*/public class SoftReference<T> extends Reference<T> {/*** Timestamp clock, updated by the garbage collector*/private static long clock;/*** Timestamp updated by each invocation of the get method. The VM may use* this field when selecting soft references to be cleared, but it is not* required to do so.*/private long timestamp;/*** Creates a new soft reference that refers to the given object. The new* reference is not registered with any queue.** @param referent object the new soft reference will refer to*/public SoftReference(T referent) {super(referent);this.timestamp = clock;}/*** Creates a new soft reference that refers to the given object and is* registered with the given queue.** @param referent object the new soft reference will refer to* @param q the queue with which the reference is to be registered,* or {@code null} if registration is not required**/public SoftReference(T referent, ReferenceQueue<? super T> q) {super(referent, q);this.timestamp = clock;}/*** Returns this reference object's referent. If this reference object has* been cleared, either by the program or by the garbage collector, then* this method returns {@code null}.** @return The object to which this reference refers, or* {@code null} if this reference object has been cleared*/public T get() {T o = super.get();if (o != null && this.timestamp != clock)this.timestamp = clock;return o;}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。