Skip to content
阅读进度

如何理解LRU 缓存的 Java 实现? ​

返回 Java 与并发 目录

标准回答 ​

可以用哈希表加双向链表实现,哈希定位和链表移动平均O(1)。Java的LinkedHashMap访问顺序模式可用于简洁实现;超限淘汰最久未访问项。

下面是按条目数限制的练习,不是图片缓存成品。accessOrder=true时get也会修改顺序,所以get和put都必须遵循同一同步策略。示例只开放两个同步方法,避免把内部Map暴露给调用者。

用于Bitmap还应按字节计量、处理资源生命周期并避免锁内执行重的创建或释放逻辑;缓存键也必须包含会影响结果的条件。

追问与回答 ​

LRU能解决所有缓存问题吗 ​

不能。扫描型访问可能污染热点,过期和一致性需额外设计;淘汰策略不是完整缓存协议。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。