LruCache 底层实现原理

LruCache 中 Lru 算法的实现就是通过 LinkedHashMap 来实现的。LinkedHashMap是Hashmap的子类,它内部使用一个双向链表来存储 Map 中的 Entry 顺序关系, 对于 get、put、remove 等操作,LinkedHashMap 除了要做 HashMap 要做的事,还会调整 Entry 顺序链表。LruCache 中将 LinkedHashMap 的顺序设置为 Lru 顺序来实现 Lru 缓存,每次调用 get(也就是从内存缓存中取图片),则将该对象移到链表的尾端。调用 put 插入新的对象也是存储在链表尾端,这样当内存缓存达到设定的最大值时,将链表头部的对象移除。
那么 LruCache 的怎么回收bitmap
LruCache 每次添加 Bitmap 图片缓存的时候(put 操作),都会调用 sizeof 方法,返回 Bitmap 的内存大小给 LruCache,然后循环增加这个 size。当这个 size 内存大小超过初始化设定的 cacheMemory 大小时,则遍历map 集合,把最近最少使用的元素(头部) remove 掉.

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

scenelyLiu

您的鼓励将是我创作的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值