带有不应删除对象的LRU缓存



我在Android应用程序中使用LRU缓存(android.util中的LruCache类)。其通常工作良好。

现在我对这个LRU缓存有一个特殊的要求:我希望一些对象永远不会被删除。解释这种情况:我有一个永远不应该删除的对象数组(名为mymetadata对象),还有很多其他对象(名为dynamicdataobject)应该用LRU规则删除。我想将mymetadata对象存储在LRU缓存中,因为对象阵列也可以增长,使用LRU缓存有助于避免内存不足。

有什么技巧可以保证mymetadata对象永远不会从LRU缓存中删除吗?或者我应该简单地从数组中访问一个对象,以便将其标记为上次使用?

有什么技巧可以保证mymetadata永远不会被删除吗从LRU缓存?或者我应该简单地访问数组的一个对象它被标记为最后一次使用?

除了定期触摸要保存在LRU缓存中的对象(以强制提高它们的级别)之外,我看不出还能做什么。这样做的一个问题可能是什么时候应该触摸这些对象?此操作对性能的影响是什么?

另一种方法是根据对象的持久性来拆分对象的存储。为持久性对象保留一个标准映射,为可能过期的对象保留LRU缓存。然后,两个数据结构的混合可以隐藏在类似于MapLruCache的单个接口后面(每个查询都指向正确的内部存储器)。

我想将mymetadata对象放入LRU缓存,因为对象数组也可以增长

这似乎与您对某些对象的"从未删除"要求相冲突。如何决定何时允许持久对象过期?

无论如何,另一种方法是重新实现LRU缓存数据结构,保留两个单独的有序对象列表,而不是一个:一个用于mymetadata对象,另一个用于dynamicdata

最新更新