重温LRU缓存机制(LRUCache)

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 通过LinkedHashMapaccessOrder(访问顺序) 来实现LRU缓存机制。

你可能感兴趣的