前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Android 应用开发】LruCache 简介

【Android 应用开发】LruCache 简介

作者头像
韩曙亮
发布2023-03-27 16:58:56
4560
发布2023-03-27 16:58:56
举报
文章被收录于专栏:韩曙亮的移动开发专栏

文章目录

LruCache 应用场景

1. 缓存需求 : 处理大量数据时 , 为了提升性能 , 需要对其中的部分数据进行缓存 ; 涉及到使用缓存 , 和删除内存缓存操作 , 使缓存的数据大小保持在一个稳定的水平 ;

2. 数据写入缓存 : 当需要使用某个数据时 , 将该数据写入缓存 , 此时先对内存使用情况进行一次判定 ; 如果内存不足 , 需要移除缓存数据中的部分内容 , 然后再将数据写入缓存 ; 当然 , 如果缓存内存足够 , 直接写入缓存即可 ;

3. LruCache 引入 : 那么如何确定删除缓存中的哪些数据呢 , 这里就需要用到 LruCache 了 ;

LruCache 算法原理

LRU ( Least Recently Used 最近最少使用 ) 算法 : 内部维护了一个固定大小的队列 ( 先进先出 ) ; 放入元素时根据不同的情况执行不同的策略 ;

  • 1. 缓存中是否有该元素 : 如果缓存中有该元素 , 那么将该元素放到队列的队头 ;
  • 2. 缓存中没有该元素 : 如果缓存中没有改元素 , 那么需要插入该元素 ;
  • 3. 缓存空间是否已满 : 如果缓存空间满了 , 需要将队尾元素删除 , 将元素放在队首 ;
  • 4. 缓存空间没有满 : 如果缓存空间没有满 , 直接将元素放在队首 ;

缓存队列中 , 队尾的元素就是最近最少使用的元素 , 因为其一旦使用就会提升到队首 , 因此当缓存满了以后 , 就删除队尾的元素 ;

LruCache 实现

1. Android 中的 LruCache : 其缓存空间就是一个 LinkHashMap 链表 , 当调用 put 方法向其中放入新元素时 , 就会判断这个 LinkHashMap 链表是已满 , 如果没有空间 , 就将最后一个最近最少使用的元素删除 ;

2. LinkHashMap 实现 : LinkHashMap 链表内部由数组和双向链表实现 , 其能够保证与队列一致的性质 , 即先进先出 , 并保证其插入取出顺序的一致性 ; 当调用 get 方法获取其中的元素时 , 会将该元素提取到队头中 , 这符合了 LRU 算法的要求 ;

LruCache 参考

LruCache 参考 :

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
    • LruCache 应用场景
      • LruCache 算法原理
        • LruCache 实现
          • LruCache 参考
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档