LruCache 内存缓存

什么是 LruCache

是一种内存缓存对象,使用 LRU(Least Recent Used)算法管理缓存。

缓存是空间换时间的一种策略,将低速设备上的数据保存一部分到高速设备上,从而提高整个系统长期运行时的平均读取速度。通常高速设备的空间较小,低速设备的空间较大,也就是说缓存的空间总是不可能覆盖数据全集,需要有缓存数据交换的策略。而缓存算法实现的就是缓存如何交换的细节。

LRU 算法,Least Recent Used,翻译过来是最近最少使用的意思,该算法在缓存空间不够的时候,将近期最少使用的数据替换为新数据。该算法源自这样一种访问资源的需求:近期访问的数据,可能在不久的将来会再次访问。于是最少访问的数据就是价值最小的,是最应该踢出缓存空间的数据。

读取数据就像吃自助餐,吃的动作就是读,你需要一个盘子作为缓存,将好吃的先填满一个盘子,这样就可以坐下来好好吃一波。如果没有缓存,可以想像成一次盘子里只拿一份食物,坐下来吃两口,没了,还得再拿去,这样就降低了吃的效率。去食物摆放处拿,是从低速设备读入,直接在盘子里吃,是从高速设备读入。

用法

  1. 继承 LruCache 新建一个类,这是为了
    1. 重写 int sizeOf(K, V) 方法,精确衡量缓存大小。
    2. 重写 V create(K)entryRemoved() 方法,不常用。
  2. 创建一个实例,指定缓存大小:new LruCache(maxSize)
    1. 注意这个缓存大小是个逻辑值,需要自己定义单位
    2. 要保证 int sizeOf(K, V) 返回值与 maxSize 单位相同
  3. 写入和读取
    1. 写入使用 V put(K, V) 方法,返回原来的 V
    2. 读取使用 V get(K) 方法,返回 null 表示缓存未命中

线程安全

LruCache 常用操作 getput 都是线程安全的。但不常用的 createentryRemoved 不是线程安全的。

套路

  1. 创建和配置
private void initCache() {
   
    int maxMemoryKB = Runtime.getRuntime().maxMemory() / 1024
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值