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

弱引用在 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 检测到对象没有强引用、软引用或其他方式保持存活,仅剩弱引用,就会:
这个过程是自动且不可预测的,依赖于 JVM 的 GC 策略和运行状态。
立即学习“Java免费学习笔记(深入)”;
弱引用常用于构建缓存或映射表,希望数据能被自动清理,避免长期驻留内存。例如:
比如 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速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号