LRU缓存包含不应删除的对象

时间:2014-02-08 15:15:02

标签: data-structures android-lru-cache

我在Android应用中使用了来自LruCache的LRU缓存(android.util类)。这通常很好。

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

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

1 个答案:

答案 0 :(得分:1)

  

是否有任何技巧可以保证永远不会删除 mymetadata   从LRU缓存?或者我应该只是访问数组的对象   它被标记为上次使用?

除了经常触摸想要保留在LRU缓存中的对象(强制提升他们的等级),我也看不出还有什么可以做。这个问题的一个问题可能是什么时候应该触摸这些对象以及这个操作对性能的影响是什么?

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

  

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

这似乎与某些对象的“永不删除”要求相冲突。你如何决定何时允许持久对象过期?

无论如何,另一种方法是重新实现LRU缓存数据结构,保留两个单独的有序对象列表而不是一个对象:一个用于 mymetadata 对象,另一个用于 dynamicdata < / em>对象。然后将对该数据结构的每个查询定向到右侧列表,并且两种类型的对象可以独立地到期(也可以针对每组对象独立地选择高速缓存的大小)。但是这两种对象都存储在同一个哈希表/ map中。