我想实现一个简单的缓存,不想做太多工作(当然)。 我认为其中一个标准的Java集合应该足够,只需要进行一些额外的工作。 具体来说,我正在存储来自服务器的响应,键可以是请求URL字符串或从URL生成的哈希码。
我最初认为我可以使用WeakHashMap
,但看起来这种方法强制我管理我想要保留的对象,并且我没有用强引用管理的任何对象都会立即被清除。 我应该尝试使用SoftReference
值的ConcurrentHashMap
吗? 还是那些也会被很积极地清理掉?
我现在正在查看LinkedHashMap
类。 经过一些修改,它看起来很有前途,可以用作MRU缓存。 还有其他建议吗?
无论我使用哪个集合,我是否应该尝试手动修剪LRU值,还是可以信任VM偏向于不回收最近访问的对象?
顺便说一下,我正在Android上开发,因此我不想导入任何第三方库。 我处理的堆非常小(16到24 MB),因此VM可能非常渴望回收资源。 我假设GC会很积极。
LinkedHashMap
我不一定需要执行remove()
然后再执行put()
,因为它还可以修改链表的顺序为“访问顺序”,而不是默认的“插入顺序”。 - Neil Traft