LRU
是什么?LRU
是 Least Recently Used
最近最少使用。LRUCache
是最近最少使用缓存机制,即会优先淘汰近期最少使用的缓存对象。
LRUCache
的实现原理。LRUCache
内部使用了LinkedHashMap
来实现的。
通过LinkedHashMap
accessOrder 实现最近最少使用的实现。
/
LinkedHashmap 构造方法有一个public LinkedHashMap(int initialCapacity,float loadFactor,boolean accessOrder)
三个参数分别是initialCapacity
初始容量、loadFactor
负载系数、accessOrder
访问顺序。如果为true
Linked 为访问顺序,false
为插入顺序。LRUCache
使用了这个构造方法,并且accessOrder
为true。 每次会把访问的节点放到队尾。
LRUCache
的具体实现通过重写 removeEldestEntry
方法和通过缓存大小计算初始容量来实现
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
通过LinkedHashMap
的accessOrder
(访问顺序) 来实现LRU
缓存机制。