发布于2026-07-10 阅读(0)
扫一扫,手机访问
WeakHashMap 不是一个拿来就能用的图片缓存方案,至少,不能直接把图片存成 value 然后用它来扛 OOM。这个结论可能跟不少人的直觉相悖,但坑就在源码里。

public class ImageCache {
private final Map> cache
= new WeakHashMap<>();
public BufferedImage get(String key) {
SoftReference ref = cache.get(key);
BufferedImage img = (ref != null) ? ref.get() : null;
if (img == null) {
cache.remove(key);
}
return img;
}
public void put(String key, BufferedImage value) {
cache.put(key, new SoftReference<>(value));
}
}
注意几个关键节点:
- 每次 get() 之后必须判空并手动 remove(),否则失效的 SoftReference 会一直占着桶位;
- 不要在 put() 前先 get() 检查 key 是否存在——WeakHashMap 的 get() 不触发清理,旧 entry 可能仍然残留;
- 当前的 key 必须支持 equals() 和 hashCode() 方法,String 已经自带,自定义 key 别忘了。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8