重温LRU缓存机制(LRUCache)

LRU是什么?

LRULeast Recently Used 最近最少使用。LRUCache是最近最少使用缓存机制,即会优先淘汰近期最少使用的缓存对象。

LRUCache的实现原理。

LRUCache内部使用了LinkedHashMap来实现的。如果对LinkedHashMap不熟悉可以看这篇文章
LinkedHashMap解析
通过LinkedHashMap accessOrder 实现最近最少使用的实现。

LinkedHashmap 构造方法有一个public LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder) 三个参数分别是initialCapacity初始容量、loadFactor负载系数、accessOrder 访问顺序。如果为true Linked 为访问顺序,false 为插入顺序。LRUCache 使用了这个构造方法,并且accessOrder为true。 每次会把访问的节点放到队尾。

LRUCache的具体实现

通过重写 removeEldestEntry方法和通过缓存大小计算初始容量来实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public LRUCache(int cacheSize) {
this.cacheSize = cacheSize;
int hashTableCapacity = (int) Math.ceil(cacheSize / LRUCache.hashTableLoadFactor) + 1;
this.map = new LinkedHashMap<K, V>(hashTableCapacity, LRUCache.hashTableLoadFactor, true) {
// (an anonymous inner class)

private static final long serialVersionUID = 1;

@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return this.size() > LRUCache.this.cacheSize;
}
};
}

LRUCache总结

LRUCache 通过LinkedHashMapaccessOrder(访问顺序) 来实现LRU缓存机制。

文章作者: zhangman523
文章链接: http://blog.zhangman523.cn/2021/01/14/android-LRUCache/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 zhangman523
支付宝打赏
微信打赏