-
Notifications
You must be signed in to change notification settings - Fork 783
2019-06-19:简要说说 LruCache 的原理? #79
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
LruCache是使用一个LinkedHashMap简单内存的缓存,是强引用;没有软引用。如果添加的数据大于设置的数据,就删除最先缓存数据来调整内存数据。 |
LRU 顾名思义就是最近最少使用,才用链表实现 |
LruCache是最近最少使用算法 |
LruCache 非常适合用于 缓存图片,他的主要算法原理是包最近使用的对象 存储在 LinckHashMap中,并且把最近使用的最少的对象在 缓存值达到预设值之前从内存中移除 `public class LruCachePhoto {
}` |
androidx.collection.LruCache 在 put 操作时, 首先计算新的缓存对象, 占多少空间, 再根据 key, 移除老的对象, lruCache 和 LinkedHashMap 的关系: |
LruCache和DiskLruCache底层实现 LRU概念-最近最少使用 将访问的元素根据访问的顺序 进行排序 LruCache和DiskLruCache底层均为LinkedHashMap 是一个由包含KV的结点形成的双向链表 按照进入的顺序排列 当进入的元素在链表里有重复 会将这个元素调到链头表示访问频度高 当超过空间阈值时 会首先淘汰最近最少使用的元素 DiskLru相比于Lru来说 更注重于对文件的读写 和文件操作的保护 LruCache因为其特性会出现在使用中有元素被淘汰 而在业务场景中有时候需要被淘汰的元素 我们可以将其淘汰的元素 存储起来保存在队列中 避免这种情况 |
LruCache 是最近最少使用算法的一种实现,主要用于内存缓存。 LruCache 内部使用 LinkedHashMap 来实现最近最少使用的核心逻辑。通过构造函数初始化最大的cache 大小,其单位要和 sizeOf 大小一致。还会初始化一个有序的 LinkedHashMap,这个 LinkedHashMap 是个有序的双向链表,根据进入顺序进行排序,新进入或最新使用的放在链表尾部,这样表头就是最少使用的。当超过给定的大小时就会移除表头的数据,知道大小小于给定大小为止。 注意:LruCache 是强引用,LruCache 本身并没有释放内存存,它只是把 LinkedHashMap 中的数据移除,如果数据还在其他地方引用,还是无法释放内存,可以手动释放; |
LruCache 是android 提供的缓存类 内部提供了LinkedHashMap来做存储方式 而LinkedHashMap持有对象是以强引用的方式,所以不会被系统回收掉。 |
1 similar comment
LruCache 是android 提供的缓存类 内部提供了LinkedHashMap来做存储方式 而LinkedHashMap持有对象是以强引用的方式,所以不会被系统回收掉。 |
No description provided.
The text was updated successfully, but these errors were encountered: