带条件/超时的弱引用

Mar*_*jer 7 java garbage-collection weak-references

是否有可能在Java中创建一个弱引用,只有在指定的条件返回时才能将其对象发送到垃圾收集器true

假设我有一些缓存可以将ID号映射到某些数据:

Map<Integer, SomeData> cache = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

SomeData有两个重要的方法 - void updateTime()只是将内部变量设置为当前时间,并boolean canBeDeleted()检查对象是否在过去10分钟内使用过(仅通过比较当前时间和保存时间加上10分钟).如果它在这段时间内没有被使用,则该方法返回true并且可以从缓存中移除对象...

但是,当我使用弱引用而不是强引用创建缓存时:

Map<Integer, WeakReference<SomeData>> cache = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

然后唯一的WeakReference检查可能是对对象的强引用,但我想如果它也检查我的条件canBeDeleted()并且如果它返回则没有删除引用false.有办法怎么做?

(最重要的是,有一个内存泄漏,我不知道如何解决它...当删除WeakReference中的对象时,地图仍然包含不必要的键/值对).

提前致谢.

xfx*_*xfx 0

您只需删除缓存中条件为真的键即可。

  • 我知道,但是我需要一个单独的线程,例如每 10 分钟检查一次缓存,并删除所有不必要的内容。但如果可能的话,我宁愿避免另一个线程,并通过与垃圾收集器的某种合作来完成此操作。 (2认同)