LruCache原理分析整理
来源:互联网 发布:python 字符串相似度 编辑:程序博客网 时间:2024/06/06 18:37
简介
LRU即Least Recently Used,近期最少使用算法。也就是当内存缓存达到设定的最大值时将内存缓存中近期最少使用的对象移除,有效的避免了OOM的出现。
讲到LruCache不得不提一下LinkedHashMap,因为LruCache中Lru算法的实现就是通过LinkedHashMap来实现的。LinkedHashMap继承于HashMap,它使用了一个双向链表来存储Map中的Entry顺序关系,这种顺序有两种,一种是LRU顺序,一种是插入顺序,这可以由其构造函数public LinkedHashMap(int initialCapacity,float loadFactor, boolean accessOrder)指定,这里引入一个简单的例子:
new LinkedHashMap<K, V>(0, 0.75f, true)
这句代码表示,初始容量为零,0.75是加载因子,表示容量达到最大容量的75%的时候会把内存增加一半。最后这个参数至关重要。表示访问元素的排序方式,true表示按照访问顺序排序,false表示按照插入的顺序排序。这里写了一个小程序专门研究这两个参数的不同之处。
public static final void main(String[] args) { LinkedHashMap<Integer, Integer> map = new LinkedHashMap<>(0, 0.75f, true); map.put(0, 0); map.put(1, 1); map.put(2, 2); map.put(3, 3); map.put(4, 4); map.put(5, 5); map.put(6, 6); map.get(1); map.get(2); for (Map.Entry<Integer, Integer> entry : map.entrySet()) { System.out.println(entry.getKey() + ":" + entry.getValue()); } }
当设置为true的时候,输出结果是:
0:03:34:45:56:61:12:2
当设置为false的时候,输出顺序为:
0:01:12:23:34:45:56:6
有以上结果可以看出,这个设置为true的时候,如果对一个元素进行了操作(put、get),就会把那个元素放到集合的最后,设置为false的时候,无论怎么操作,集合元素的顺序都是按照插入的顺序来进行存储的。
到了这里我们可以知道,这个LinkedHashmap正是实现Lru算法的核心之处,当内容容量达到最大值的时候,只需要移除这个集合的前面的元素直到集合的容量足够存储数据的时候就可以了。
原文请点击这里查看,里面有LruCache的源码,注释很详细了。
https://www.cnblogs.com/liuling/archive/2015/09/24/2015-9-24-1.html
参考:http://blog.csdn.net/u012943767/article/details/51897259
- LruCache原理分析整理
- LruCache 实现原理分析
- LruCache 实现原理分析
- LruCache原理分析
- Lrucache算法的原理简要分析
- Android LRUCache原理及源码分析(阿里巴巴)
- LruCache原理
- LruCache原理
- LruCache分析
- LruCache 分析
- 浅析LruCache原理
- LruCache实现原理
- Android LruCache技术原理
- 说说 LruCache 底层原理
- LRUCache的实现原理
- Android LruCache类分析
- Android LruCache使用分析
- Android缓存-LruCache分析
- js传数组到controller
- nodejs模块nodemailer基本使用-邮件发送(支持附件)
- getX、getY与getRawX、getRawY的区别
- 计算机网络漫谈:OSI七层模型与TCP/IP四层(参考)模型
- select case when if 的一些用法
- LruCache原理分析整理
- ◆竞赛题目◆◇NOIP 2017 普及组◇ Chess 棋盘
- 微信小程序开发指南
- UCAS计算机网络实验
- 欢迎使用CSDN-markdown编辑器
- Maven本地安装和配置
- batch normalization的tensorflow实现
- 有关QT中声明一个vector为全局变量的初始化问题
- linux centos7安装nginx