在 Java 中,弱引用(Weak Reference)是 java.lang.ref.WeakReference 提供的一种引用类型,用于描述“非必须存在”的对象。
Java 中常见的引用强度从强到弱:
强引用(Strong Reference)
Object o = new Object();
只要有强引用,GC 永远不会回收。
软引用(SoftReference)
弱引用(WeakReference)
虚引用(PhantomReference)
弱引用的对象:
WeakReference<Object> weakRef = new WeakReference<>(new Object());
此时:
new Object() 只被弱引用持有weakRef.get() 会返回 nullimport java.lang.ref.WeakReference;
public class WeakDemo {
public static void main(String[] args) {
WeakReference<Object> ref = new WeakReference<>(new Object());
System.out.println(ref.get()); // 有对象
System.gc(); // 建议 GC
System.out.println(ref.get()); // 可能为 null
}
}
Map<Key, Value> map = new WeakHashMap<>();
✅ 常用于:
例如:
ReferenceQueue<Object> queue = new ReferenceQueue<>();
WeakReference<Object> ref = new WeakReference<>(new Object(), queue);
当对象被回收时,弱引用会被放入队列,可做清理逻辑。
| 对比项 | 弱引用 | 软引用 |
|---|---|---|
| GC 时是否回收 | 一定回收 | 内存不足才回收 |
| 适用场景 | 生命周期短、防泄漏 | 内存敏感缓存 |
| 强度 | 更弱 | 稍强 |
Java 弱引用是一种“只要 GC 就回收”的引用方式,用来避免对象因引用关系而无法释放,常用于缓存和防止内存泄漏。
如果你愿意,我也可以讲:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。