请参见:
描述
类摘要 | |
---|---|
PhantomReference<T> | 虚引用对象,在回收器确定其指示对象可另外回收之后,被加入队列。 |
Reference<T> | 引用对象的抽象基类。 |
ReferenceQueue<T> | 引用队列,在检测到适当的可到达性更改后,垃圾回收器将已注册的引用对象添加到该队列中。 |
SoftReference<T> | 软引用对象,在响应内存需要时,由垃圾回收器决定是否清除此对象。 |
WeakReference<T> | 弱引用对象,它们并不禁止其指示对象变得可终结,并被终结,然后被回收。 |
提供了引用对象类,支持在某种程度上与垃圾回收器之间的交互。程序可以使用一个引用对象来维持对另外某一对象的引用,所采用的方式是使后者仍然可以被回收器回收。程序还可以安排在回收器确定某一给定对象的可到达性已经更改之后的某个时间得到通知。
每种引用对象类型都是通过抽象的基本
类的一个子类实现的。其中一个子类的实例封装了对特定对象的引用,该对象名为指示对象。每个引用对象都提供了获取和清除该引用的方法。引用对象是不可变的,因此,除了清除操作之外,没有提供 Reference
set
操作。通过添加任何所需的字段和方法,程序可以为这些子类进一步创建子类,或者可以不加更改地使用这些子类。
ReferenceQueue
类实现的。
已注册的引用对象及其队列之间的关系是单向的。也就是说,队列不会追踪那些向它注册的引用。如果一个已注册的引用本身变得不可到达,则永远不会将它加入到队列中。使用引用对象的程序的责任是,确保对象是可达到的,只要程序对其指示对象感兴趣。
虽然某些程序会选择专门使用一个线程从一个或多个队列中移除引用对象并处理它们,但这是绝对没有必要的。一种通常很有用的策略是:在执行另一个相当频繁的操作期间检查引用队列。例如,使用弱引用来实现弱键的哈希表能在每次访问表时轮询其引用队列。这就是
类的工作方式。因为 WeakHashMap
方法仅仅检查内部数据结构,此检查只为哈希表访问方法增加了很小的系统开销。 ReferenceQueue.poll