LRU LinkedHashMap根据可用内存限制大小

san*_*ity 5 java garbage-collection memory-management

我想创建一个LinkedHashMap,它将根据可用内存限制其大小(即,当freeMemory + (maxMemory - allocatedMemory)达到某个阈值时).这将用作缓存的一种形式,可能使用"最近最少使用"作为缓存策略.

我担心的是,allocateMemory还包括(我假设)未垃圾收集的数据,因此将高估估计已用内存的数量.我担心这可能产生的意外后果.

例如,LinkedHashMap可能会继续删除项目,因为它认为没有足够的可用内存,但可用内存不会增加,因为这些已删除的项目不会立即被垃圾回收.

有没有人有这种类型的经验?我的顾虑值得关注吗?如果是这样,有人可以建议一个好的方法吗?

我应该补充一点,我也希望能够"锁定"缓存,基本上说"好吧,从现在开始不要因为内存使用问题而删除任何东西".

Kev*_*ion 1

我知道我有偏见,但我真的必须为此强烈推荐我们的MapMaker 。使用 softKeys() 或 softValues() 功能,具体取决于它是键的 GC 集合还是更恰当地描述条目何时可以被清理的值的 GC 集合。