温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java弱引用会回收吗

发布时间:2026-10-11 10:33:40 来源:亿速云 阅读:85 作者:小樊 栏目:编程语言

会,但不是“一定会立刻回收”,而是在特定条件下由 GC 回收。

1. 什么是 Java 弱引用(WeakReference)

弱引用是通过 java.lang.ref.WeakReference 创建的引用:

Object obj = new Object();
WeakReference<Object> weakRef = new WeakReference<>(obj);
obj = null; // 去掉强引用

2. 弱引用会不会被回收?

会。
当对象只被弱引用指向,没有任何强引用或软引用指向它时,
下一次垃圾回收(GC)发生时,这个对象就会被回收。

关键点:

  • ✅ 只要发生 GC
  • ✅ 对象没有强引用
  • ✅ 只有弱引用

3. 和强引用、软引用的区别

引用类型 是否会被回收 回收时机
强引用 ❌ 不会 永远不回收(直到无引用)
软引用 ✅ 会 内存不足时
弱引用 ✅ 会 下次 GC 就回收
虚引用 ✅ 会 随时,主要用于跟踪回收

4. 一个常见误区

“弱引用一定会被回收”

❌ 不准确
如果还没发生 GC,或者还有强引用,就不会回收。

Object a = new Object();
WeakReference<Object> w = new WeakReference<>(a);
// a 还活着,弱引用不会回收

5. 典型使用场景

  • WeakHashMap(key 是弱引用)
  • 缓存(防止内存泄漏)
  • 防止监听器、回调导致的内存泄漏

6. 示例代码

Object obj = new Object();
WeakReference<Object> weak = new WeakReference<>(obj);
obj = null;

System.gc(); // 建议 GC(不保证立刻)

if (weak.get() == null) {
    System.out.println("对象已被回收");
}

✅ 总结一句话:
Java 弱引用在对象没有强引用、且发生 GC 时会被回收。

如果你想知道 WeakHashMap 为什么用弱引用 或 ThreadLocal 为什么可能内存泄漏,我也可以详细讲。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手