首页 > Java > java教程 > 正文

弱引用怎样在java中回收?

冰川箭仙
发布: 2025-12-04 15:15:59
原创
217人浏览过
弱引用是一种非强引用关系,通过WeakReference类实现,不阻止对象被垃圾回收。只要发生GC,即使内存充足,仅被弱引用指向的对象也会被立即回收。示例中,将obj置为null后只剩弱引用,调用System.gc()后weakRef.get()返回null。弱引用的回收发生在任意GC过程(包括Minor GC和Full GC),一旦JVM发现对象无强引用、软引用等存活依赖,便将其标记为可回收,清空弱引用并释放内存。该行为由JVM自动完成,不可预测。常见用途包括避免内存泄漏,如WeakHashMap使用弱引用作为键,当键无外部引用时条目自动移除;也用于监听器管理或缓存场景,确保不影响对象正常回收。核心特性是“不阻碍回收”,适合构建自动清理的轻量级引用。

弱引用怎样在java中回收?

弱引用在 Java 中通过 WeakReference 类实现,它不会阻止对象被垃圾回收器回收。只要垃圾回收器发现一个对象只有弱引用指向它,就会在下一次 GC 时立即回收该对象,而不需要等待多次扫描或执行 finalize 方法。

什么是弱引用?

弱引用是一种非强引用关系。使用 java.lang.ref.WeakReference 包装的对象,不会阻止垃圾回收器对该对象进行回收。一旦系统触发 GC,哪怕内存还够用,只要发现对象只被弱引用关联,就会将其标记为可回收。

示例:

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

        // 此时对象只有弱引用指向它
        System.gc(); // 触发垃圾回收

        System.out.println(weakRef.get()); // 很可能输出 null
    
登录后复制

弱引用的回收时机

弱引用对象的回收发生在任何一次垃圾回收过程中(包括 Minor GC 和 Full GC),只要 JVM 检测到对象没有强引用、软引用或其他方式保持存活,仅剩弱引用,就会:

  • 将该对象加入回收队列
  • 清空所有指向它的弱引用(即 weakRef.get() 返回 null)
  • 释放其占用的堆内存

这个过程是自动且不可预测的,依赖于 JVM 的 GC 策略和运行状态。

立即学习Java免费学习笔记(深入)”;

常见用途:避免内存泄漏

弱引用常用于构建缓存或映射表,希望数据能被自动清理,避免长期驻留内存。例如:

  • WeakHashMap:键是弱引用,当键不再被外部引用时,整个条目可以被自动移除
  • 监听器注册机制中防止对象无法释放
  • 缓存中不希望影响对象生命周期的场景

比如 WeakHashMap 的典型使用:

    Map<String, Object> cache = new WeakHashMap<>();
    String key = new String("temp");
    cache.put(key, new Object());

    key = null;
    System.gc();

    // 下次访问 cache 可能已丢失该 entry
登录后复制

基本上就这些。弱引用的核心就是“不阻碍回收”,适合用来做轻量级、自动清理的引用关系。不复杂但容易忽略细节。

以上就是弱引用怎样在java中回收?的详细内容,更多请关注php中文网其它相关文章!

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号