在 Java 中,软引用(SoftReference) 是四种引用类型(强、软、弱、虚)中的一种,主要用途是在内存充足时保留对象,在内存不足时允许被垃圾回收,非常适合做内存敏感的缓存。
SoftReference<byte[]> ref = new SoftReference<>(new byte[10 * 1024 * 1024]);
软引用常用于缓存大对象(如图片、文件内容、计算结果):
Map<String, SoftReference<Bitmap>> cache = new HashMap<>();
注意:实际项目中更推荐
LRUCache或WeakHashMap+ 手动策略
相比强引用:
可以监听软引用对象被回收:
ReferenceQueue<byte[]> queue = new ReferenceQueue<>();
SoftReference<byte[]> ref = new SoftReference<>(new byte[1024], queue);
GC 后可通过 queue 清理 map 中的无效引用。
| 引用类型 | 是否回收 | 典型用途 |
|---|---|---|
| 强引用 | 永不 | 普通对象 |
| 软引用 | 内存不足时 | 缓存 |
| 弱引用 | 下次 GC | 临时关联 |
| 虚引用 | 随时 | 对象回收通知 |
LruCachebyte[] data = ref.get();
if (data != null) {
// 使用
}
Java 软引用用于在“内存够时用,内存不够时丢”的场景,最适合做内存敏感型缓存。
如果你愿意,我也可以讲 软引用在 Android 中的实际替代方案 或 和 WeakHashMap 的区别。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。