是否有可能在Java中创建一个弱引用,其对象可以被发送到垃圾收集器只在指定条件返回true
?
比方说,我有这样的事情,其ID号映射到一些数据的高速缓存:
Map<Integer, SomeData> cache = new HashMap<>();
SomeData
有两个重要的方法- void updateTime()
这只是设置到当前时间的内部变量,和boolean canBeDeleted()
如果对象具有或没有在最后10分钟被使用(简单地通过比较当前时间和它检查保存的时间加上10分钟)。 如果它没有被用于该一定的时间,该方法返回true
和对象可以从缓存中删除...
然而,当我创建弱引用而不是强缓存:
Map<Integer, WeakReference<SomeData>> cache = new HashMap<>();
那么唯一的WeakReference
检查是可能的对象可能强引用,但我想,如果它也检查了我的条件canBeDeleted()
并没有移除的参照,如果它返回false
。 有没有办法如何做到这一点?
(最重要的是,有内存泄漏,我不知道如何解决它...当了WeakReference内被删除的对象,地图还包含不必要的键/值对)。
提前致谢。