在 Java 中,强引用(Strong Reference) 是最常见、也是默认的引用类型。你平时写的:
Object obj = new Object();
obj 就是一个强引用。
✅ 只要强引用还存在,垃圾回收器(GC)就绝对不会回收该对象
即使:
只要对象仍被强引用指向,GC 就不会回收它。
如果对象“已经不用了”,但仍然被强引用持有,就会导致:
常见场景:
示例(内存泄漏):
public class MemoryLeak {
private static List<Object> list = new ArrayList<>();
public void add() {
list.add(new Object());
}
}
即使 add() 执行完,list 仍强引用对象,无法回收。
强引用越多:
影响:
当强引用对象无限增长:
while (true) {
list.add(new byte[1024 * 1024]);
}
最终会抛出:
java.lang.OutOfMemoryError: Java heap space
对象的生命周期 完全由强引用决定:
| 引用类型 | GC 是否回收 | 典型用途 |
|---|---|---|
| 强引用 | ❌ 不回收 | 普通对象 |
| 软引用 | ✅ 内存不足时回收 | 缓存 |
| 弱引用 | ✅ 下次 GC 回收 | 防止内存泄漏 |
| 虚引用 | ✅ 随时可能回收 | 跟踪对象回收 |
✅ 及时置空
obj = null;
✅ 使用局部变量而非全局变量
✅ 合理使用集合,及时 remove
✅ 缓存使用 WeakHashMap / SoftReference
✅ 避免 static 持有大对象
Java 强引用是“宁死不回收”的引用,用得好是正常开发,用不好就是内存泄漏和 OOM 的根源。
如果你愿意,我也可以结合 真实项目场景 或 GC 日志分析 来讲强引用问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。