java如何表示弱引用
弱引用的概念
弱引用(Weak Reference)是一种不会阻止垃圾回收器回收对象的引用类型。当垃圾回收器运行时,如果发现某个对象只被弱引用指向,该对象会被回收。Java中通过java.lang.ref.WeakReference类实现弱引用。
创建弱引用
使用WeakReference类包装目标对象即可创建弱引用。构造方法接收一个强引用对象作为参数:
Object strongRef = new Object();
WeakReference<Object> weakRef = new WeakReference<>(strongRef);
获取弱引用对象
通过get()方法获取弱引用指向的对象。若对象已被回收,则返回null:
Object obj = weakRef.get();
if (obj != null) {
// 对象未被回收
} else {
// 对象已被回收
}
弱引用的典型应用场景
- 缓存系统:当内存不足时自动释放缓存对象。
- 监听器列表:避免因未注销监听器导致内存泄漏。
- 元数据存储:存储对象的辅助信息而不影响其生命周期。
配合引用队列使用
可以关联一个ReferenceQueue,当弱引用对象被回收时,弱引用本身会进入队列:
ReferenceQueue<Object> queue = new ReferenceQueue<>();
WeakReference<Object> weakRef = new WeakReference<>(new Object(), queue);
// 监控队列
Reference<?> ref = queue.poll();
if (ref != null) {
// 处理被回收的引用
}
注意事项
- 弱引用对象被回收后,
get()返回null,需做好判空处理。 - 不应在关键业务逻辑中依赖弱引用对象的存在性。
- 相比软引用(SoftReference),弱引用具有更激进的对象回收策略。







