美文网首页
LruCache是怎样实现LRU算法的?

LruCache是怎样实现LRU算法的?

作者: 葉華千羽 | 来源:发表于2016-10-28 15:18 被阅读56次

LruCache 内部使用 LinkedHashmap 存储数据以实现 LRU 算法。

LinkedHashmap 可以使用两种模式初始化,当 accessOrderfalse 时,其中的元素按插入顺序排序,为 true 时则按访问顺序排序。元素顺序保存在 LinkedHashmap 内部另外维护的一个双向链表中。

在访问顺序排序模式下,每次 get() 元素时,LinkedHashmap 都会把当前元素移动到链表的尾部,如此一来,排在链表前端的自然就是最近一次被访问时间最远(Least Recently Used)的元素了。

当 LruCache 执行 trim 时,逐个取出 LinkedHashmap 中最 eldest() 的元素并移除,直到指定 size 就可以了。

trim策略?

  1. 每次 put(K, V)
  2. create 方法(用于预先创建缓存值)被重写,其返回的对象被首次放置到 LinkedHashmap 中时
  3. resize(maxSize) 被调用,重新分配缓存大小时
  4. evictAll() 被调用,释放所有缓存时w

双向链表?

LinkedHashmap 中额外维护了一个 LinkedEntry ,继承自 Hashmap 中的 HashmapEntry ,并额外添加了 nxtprv 两个指针属性以实现正反双向查找。头尾两端元素的 prvnxt 互相指向对方,使得整个双向链表头尾相接。

一句话总结

Q: LruCache 怎样实现了 LRU 算法?

A: 它用于存储数据的 LinkedHashmap 使用了 LRU 方式来排列元素

怎么看着像废话(

相关文章

  • LRUCache 原理

    LruCache算法,又称为近期最少使用算法。 LruCache 中 Lru 算法的实现就是通过 LinkedHa...

  • 如何封装一个图片加载库

    ①分级缓存,著名的LruCache算法,又称为近期最少使用算法。LruCache 中 Lru 算法的实现就是通过 ...

  • Android LruCache 缓存机制实现原理

    通过使用 LruCache, 查看 LinkedHashMap 源码, 分析 LRU 算法的具体实现细节. LRU...

  • LruCache是怎样实现LRU算法的?

    LruCache 内部使用 LinkedHashmap 存储数据以实现 LRU 算法。 LinkedHashmap...

  • Android源码阅读之LruCache

    LruCache实现原理 介绍 LRU是最近最少使用(Least Recently Used)缓存算法。它需要跟踪...

  • LRUCache原理

    讲到LruCache不得不提一下LinkedHashMap,因为LruCache中Lru算法的实现就是通过L...

  • LruCache

    LruCache 一. LRU算法简介 ​ LRU算法,全称Least Rencetly Used,就是最近最...

  • LRUCache原理解析

    LRUCache底层维护了一个LinkedHashMap这个LinkedHashMap对象是实现Lru算法的关键,...

  • LRU

    [TOC] 参考 LRU算法四种实现方式介绍 一个线程安全的 lrucache 实现 --- 读 leveldb ...

  • LurCache算法

    LruCache的Lru指的是LeastRecentlyUsed,也就是近期最少使用算法。使用LruCache其实...

网友评论

      本文标题:LruCache是怎样实现LRU算法的?

      本文链接:https://www.haomeiwen.com/subject/kdrsuttx.html