在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 中的对象被删除时,映射仍包含不必要的键值对。
先谢谢了。
Guava 缓存
,您可以创建一个自动删除在给定时间内未被引用的条目的缓存。 - Keppil