温馨提示×

温馨提示×

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

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

java弱引用是什么

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

在 Java 中,弱引用(Weak Reference)是 java.lang.ref.WeakReference 提供的一种引用类型,用于描述“非必须存在”的对象。


一、Java 的引用类型回顾

Java 中常见的引用强度从强到弱:

  1. 强引用(Strong Reference)

    Object o = new Object();
    

    只要有强引用,GC 永远不会回收。

  2. 软引用(SoftReference)

    • 内存不足时才会被回收
    • 适合做缓存
  3. 弱引用(WeakReference)

    • 只要 GC 发生,就会回收
    • 不管内存是否充足
  4. 虚引用(PhantomReference)

    • 最弱,主要用于跟踪对象被回收的状态

二、弱引用是什么

弱引用的对象:

  • 生命周期依赖于是否还有强引用
  • 一旦没有强引用指向它
  • 下一次垃圾回收时一定会被回收
WeakReference<Object> weakRef = new WeakReference<>(new Object());

此时:

  • new Object() 只被弱引用持有
  • GC 发生时,该对象会被回收
  • weakRef.get() 会返回 null

三、基本使用示例

import 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
    }
}

四、典型使用场景

1️⃣ 防止内存泄漏的缓存(WeakHashMap)

Map<Key, Value> map = new WeakHashMap<>();
  • Key 是弱引用
  • Key 不被外部强引用时,Entry 会自动被回收

✅ 常用于:

  • 监听器管理
  • 元数据缓存

2️⃣ 避免对象长期驻留内存

例如:

  • 缓存“临时对象”
  • ThreadLocal 的某些实现思想(JDK 修正后使用弱引用)

3️⃣ 对象生命周期监听(配合 ReferenceQueue)

ReferenceQueue<Object> queue = new ReferenceQueue<>();
WeakReference<Object> ref = new WeakReference<>(new Object(), queue);

当对象被回收时,弱引用会被放入队列,可做清理逻辑。


五、弱引用 vs 软引用

对比项 弱引用 软引用
GC 时是否回收 一定回收 内存不足才回收
适用场景 生命周期短、防泄漏 内存敏感缓存
强度 更弱 稍强

六、一句话总结

Java 弱引用是一种“只要 GC 就回收”的引用方式,用来避免对象因引用关系而无法释放,常用于缓存和防止内存泄漏。

如果你愿意,我也可以讲:

  • WeakHashMap 源码
  • ThreadLocal 为什么用弱引用
  • 强/软/弱/虚引用对比图
向AI问一下细节

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

AI
助
手