【发布时间】:2016-02-03 16:00:56
【问题描述】:
我有一个扩展LinkedHashMap 的类,我将其用作缓存。这个缓存有一个属性,它定义了缓存允许存储的最大字节大小。我粗略估计了我存储的对象的大小。
我覆盖put,以便更新缓存当前存储的总大小。
我还覆盖 remove 以从总数中减去我已删除的对象的大小。
目前,我正在检查是否需要从缓存中删除陈旧的条目以释放空间,以便在 put 方法中添加新值,但是我想将此功能移动到removeEldestEntry 方法。
我遇到的问题是,如果我重写的removeEldestEntry 返回true,我的重写remove 方法似乎没有被调用。这会导致一个问题,即当removeEldestEntry 删除过时的条目时,我当前存储的大小变量没有更新。
有谁知道当removeEldestEntry 返回true 时使用什么代码路径来删除最旧的条目。我是否可以覆盖用于删除条目的方法?
当LinkedHashMap 触发对removeEldestEntry 的删除时,我是否可以进行更新计算。
我知道 api 允许您在 removeEldestEntry 方法中执行实际删除,只要您之后返回 false,但是我想在执行此操作之前探索其他选项。我认为这是最后一种情况。
【问题讨论】:
标签: java caching linkedhashmap