在 Java 中,弱引用(WeakReference)主要用于不希望引用本身阻止对象被垃圾回收的场景。下面从概念、适用场景、典型用法和注意事项几个方面说明。
java.lang.ref.WeakReference 包装对象Object o = new Object(),不会回收当你希望缓存对象在内存充足时可复用,但内存紧张时自动释放:
WeakReference<BigObject> ref = new WeakReference<>(new BigObject());
例如:
注意:通常配合
WeakHashMap使用
当你不希望被观察者长期持有观察者引用时:
class Listener {
// 使用弱引用避免 Activity / Component 无法回收
}
典型场景:
当对象的生命周期不应由附加信息决定时:
Map<Key, Value> map = new WeakHashMap<>();
适合:
例如:
❌ 核心业务对象
❌ 必须长期存在的数据
❌ 对生命周期敏感且不能丢失的状态
弱引用随时可能变 null,使用时要判空。
Object obj = new Object();
WeakReference<Object> weakRef = new WeakReference<>(obj);
obj = null;
System.gc();
if (weakRef.get() == null) {
System.out.println("对象已被回收");
}
WeakHashMapReferenceQueue(监听回收)当你“想用这个对象,但不想阻止它被回收”时,就用弱引用。
如果你有具体使用场景(如 Android、缓存、监听器等),我可以给更针对性的建议。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。