Android 应用开发】LruCache 简介

网友投稿 828 2022-05-30

文章目录

LruCache 应用场景

LruCache 算法原理

LruCache 实现

【Android 应用开发】LruCache 简介

LruCache 参考

1. 缓存需求 :

处理大量数据时 , 为了提升性能 , 需要对其中的部分数据进行缓存 ;

涉及到使用缓存 , 和删除内存缓存操作 ,

使缓存的数据大小保持在一个稳定的水平 ;

2. 数据写入缓存 :

当需要使用某个数据时 , 将该数据写入缓存 ,

此时先对内存使用情况进行一次判定 ;

如果内存不足 , 需要移除缓存数据中的部分内容 , 然后再将数据写入缓存 ;

当然 , 如果缓存内存足够 , 直接写入缓存即可 ;

3. LruCache 引入 :

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

LRU ( Least Recently Used 最近最少使用 ) 算法 :

内部维护了一个固定大小的队列 ( 先进先出 ) ;

放入元素时根据不同的情况执行不同的策略 ;

1. 缓存中是否有该元素 :

如果缓存中有该元素 , 那么将该元素放到队列的队头 ;

2. 缓存中没有该元素 :

如果缓存中没有改元素 , 那么需要插入该元素 ;

3. 缓存空间是否已满 :

如果缓存空间满了 , 需要将队尾元素删除 , 将元素放在队首 ;

4. 缓存空间没有满 :

如果缓存空间没有满 , 直接将元素放在队首 ;

缓存队列中 ,

队尾的元素就是最近最少使用的元素 ,

因为其一旦使用就会提升到队首 ,

因此当缓存满了以后 , 就删除队尾的元素 ;

1. Android 中的 LruCache :

其缓存空间就是一个 LinkHashMap 链表 ,

当调用 put 方法向其中放入新元素时 ,

就会判断这个 LinkHashMap 链表是已满 ,

如果没有空间 , 就将最后一个最近最少使用的元素删除 ;

2. LinkHashMap 实现 :

LinkHashMap 链表内部由数组和双向链表实现 ,

其能够保证与队列一致的性质 , 即先进先出 , 并保证其插入取出顺序的一致性 ;

当调用 get 方法获取其中的元素时 , 会将该元素提取到队头中 , 这符合了 LRU 算法的要求 ;

LruCache 参考 :

① Android LruCache 文档

② 谈谈LruCache算法的底层实现原理及其内部源码

③ 完全解析Andorid的缓存机制LruCache

Android

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:(麒麟V10-x86)编译安装zabbix5.0.8(nginx+php+mariaDB+zabbix5.0.8)
下一篇:Git简明教程
相关文章