温馨提示×

温馨提示×

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

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

WeakReference有何作用

发布时间:2026-09-20 17:57:25 来源:亿速云 阅读:95 作者:小樊 栏目:编程语言

WeakReference(弱引用)是 Java 中 java.lang.ref 包提供的一种引用类型,主要作用是在不阻止对象被垃圾回收的前提下,仍然可以“引用”该对象。


一、核心作用

让对象在无其他强引用时,能够被 GC 正常回收,从而避免内存泄漏。

普通强引用(Strong Reference):

Object obj = new Object();

只要 obj 还“可达”,对象就永远不会被回收。

弱引用:

WeakReference<Object> weakRef = new WeakReference<>(new Object());

只要没有强引用指向该对象,下一次 GC 时对象就可以被回收。


二、典型使用场景

1. 缓存(最常用)

缓存不能阻止对象被回收,否则容易造成内存泄漏。

Map<Key, WeakReference<Value>> cache = new HashMap<>();

更常见的是使用:

  • WeakHashMap(key 是弱引用)
  • SoftReference(用于内存敏感的缓存)

2. 监听器 / 回调(防止内存泄漏)

当对象只被监听器引用时,弱引用可避免其无法释放。

WeakReference<Listener> listenerRef = new WeakReference<>(listener);

3. 临时关联数据(不希望影响生命周期)

例如:

  • 与某个对象临时绑定的元数据
  • 调试信息
  • 外部框架对对象的“附加信息”

三、WeakReference 的特点

  • 不影响 GC 决策
  • 对象回收后,weakRef.get() 返回 null
  • 常与 ReferenceQueue 配合使用,感知对象已被回收
ReferenceQueue<Object> queue = new ReferenceQueue<>();
WeakReference<Object> ref = new WeakReference<>(new Object(), queue);

四、WeakReference vs 其他引用

引用类型 GC 行为 常见用途
StrongReference 不回收 普通对象
SoftReference 内存不足时回收 缓存
WeakReference 下次 GC 就回收 缓存 / 防泄漏
PhantomReference 仅用于回收通知 资源清理

五、简单示例

Object obj = new Object();
WeakReference<Object> wr = new WeakReference<>(obj);

obj = null; // 去掉强引用
System.gc();

System.out.println(wr.get()); // 可能输出 null

总结一句话

WeakReference 的作用是:在“需要用到对象,但又不想阻止它被回收”的场景下,安全地进行引用。

如果你愿意,我可以结合你具体的使用场景(如缓存、Android、框架设计)进一步说明。

向AI问一下细节

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

AI
助
手