0

0

Java面试之Java中的强软弱虚四种引用

煙雲

煙雲

发布时间:2026-01-08 08:39:08

|

484人浏览过

|

来源于php中文网

原创

强引用不会被GC回收,哪怕内存溢出;软引用在内存不足时才回收,适合内存敏感型缓存;弱引用在每次GC时都可能被回收,用于无泄漏映射;虚引用仅用于跟踪对象回收时间点,必须配合ReferenceQueue使用。

java面试之java中的强软弱虚四种引用

强引用不会被GC回收,哪怕内存溢出也不会

只要对象有强引用指向它,JVM 就认定这个对象“正在使用”,无论当前堆内存多么紧张,GC 都不会回收它。这是最常见、最“霸道”的引用类型。

典型写法:

Object obj = new Object();
这里的 obj 就是强引用。只要 obj 还在作用域内(没被赋值为 null,也没超出作用域),对应对象就绝对安全。

容易踩的坑:

  • 缓存场景下误用强引用,导致大量对象长期驻留堆中,引发 OutOfMemoryError: Java heap space
  • 忘记置 null 或及时释放集合引用(比如静态 Map 不断 put),造成内存泄漏

软引用只在内存不足时才回收,适合做内存敏感型缓存

SoftReference 的核心行为是:JVM 在抛出 OutOfMemoryError 之前,会尝试回收所有软引用指向的对象。它比强引用“松”一点,但比弱引用“倔”一点。

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

实操建议: