我实现了一个Object
缓存,像这样:的Java:对垃圾收集赛车
// Dictionary with weak keys & values
private Map<Object, WeakReference<Object>> cache = new WeakHashMap<>();
private Object checkCache(Object obj) {
// If it's in the cache, returned the cached copy.
if (cache.containsKey(obj)) return cache.get(obj).get();
// Store it in, and return it.
cache.put(obj, new WeakReference<>(obj));
return obj;
}
图片下面的比赛条件的场景:
cache.containsKey(obj)
回报true
- 的垃圾收集器开始并收集缓存中的对象。
null
被返回。
的问题是:
- 可这真的会发生? AFAIK GC可以在任何时间踢任何时间。
- Java GC可以禁用单个方法调用吗?似乎不能阻止GC。
- 是否有任何解决方法?
在此先感谢!
您正在滥用'WeakHashMap'。 – SLaks
@SLaks请你详细说明为什么? – MBlanc
在这种情况下,您既有弱键也有弱值。 –