在 Java 中,软引用(SoftReference)和弱引用(WeakReference)都是用来描述“非必需对象”的引用类型,主要区别在于被垃圾回收的时机不同。
| 引用类型 | 回收时机 | 典型用途 |
|---|---|---|
| 强引用 | 永不回收(除非无引用) | 普通对象 |
| 软引用 | 内存不足时才会回收 | 缓存 |
| 弱引用 | 下一次 GC 时就会回收 | 防止内存泄漏(如 Map 缓存) |
SoftReference<byte[]> softRef = new SoftReference<>(new byte[10 * 1024 * 1024]);
WeakReference<Object> weakRef = new WeakReference<>(new Object());
WeakHashMapObject strong = new Object();
SoftReference<Object> soft = new SoftReference<>(new Object());
WeakReference<Object> weak = new WeakReference<>(new Object());
System.gc();
// strong 还在
// weak 基本一定被回收
// soft 通常还在(内存够)
软引用:内存不够才回收(缓存)
弱引用:GC 就回收(防泄漏)
如果你愿意,我也可以讲 虚引用(PhantomReference) 或结合 WeakHashMap / ThreadLocal 的实际案例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。