Java LruCache
2015-08-30 22:10
405 查看
为了更好的使用内存,操作系统中有一种Lru(Least Recently Used)策略,将最近最少使用的项移出容量有限的内存。不仅仅操作系统这样做,平时做一些android应用等也需要在有限的空间内保存一些状态。下面来看分析我们要怎么做这个基于Lru策略的缓存:
能够快速的读取与写入 ①
能够实现Lru策略 ②
能够适应多线程并发访问操作 ③
多个线程可以同时读取,但是写操作与读操作,写操作与写操作互斥 ④
快速的读入与写入很容易是我们想起使用HashMap,而不是使用ArrayList等非结构,因为ArrayList在查找的时候需要遍历进行,不能够适应快读的读取,而HashMap使用hash值能够很快的读取对应的项,在写入方面ArrayList直接写入线性表的下一项,操作很快,HashMap需要对存入的key进行hash计算,之后检测是否有碰撞发生,整体上比ArrayList差一点。在数据量比较大的时候,ArrayList的读取速度和HashMap差距很大。
实现Lru策略需要记录元素的添加与访问顺序,需要不断的调整结构,链表将是不二直选,java中提供了LinkedHashMap可以方便实现Lru策略。
能够适应并发操作,则需要保证一些数据的同步,需要对相应的数据加锁操作。
Java1.5中提供了读写锁(ReadWriteLock),可能保证多个线程可以同时读取,但是写操作与读操作,写操作与写操作互斥。
具体实现请点击查看
LruCache
能够快速的读取与写入 ①
能够实现Lru策略 ②
能够适应多线程并发访问操作 ③
多个线程可以同时读取,但是写操作与读操作,写操作与写操作互斥 ④
快速的读取与写入
快速的读入与写入很容易是我们想起使用HashMap,而不是使用ArrayList等非结构,因为ArrayList在查找的时候需要遍历进行,不能够适应快读的读取,而HashMap使用hash值能够很快的读取对应的项,在写入方面ArrayList直接写入线性表的下一项,操作很快,HashMap需要对存入的key进行hash计算,之后检测是否有碰撞发生,整体上比ArrayList差一点。在数据量比较大的时候,ArrayList的读取速度和HashMap差距很大。
能够实现Lru策略
实现Lru策略需要记录元素的添加与访问顺序,需要不断的调整结构,链表将是不二直选,java中提供了LinkedHashMap可以方便实现Lru策略。
能够适应多线程并发访问操作
能够适应并发操作,则需要保证一些数据的同步,需要对相应的数据加锁操作。
读写锁
Java1.5中提供了读写锁(ReadWriteLock),可能保证多个线程可以同时读取,但是写操作与读操作,写操作与写操作互斥。
实现
具体实现请点击查看LruCache
相关文章推荐
- JAVA问题总结之20--可变长度形参
- java IO流文件的读写具体实例
- 学习Javamail总结
- SpringMVC基础-URL参数和Java对象的映射
- struts2重定向
- Eclipse的中文注释字体过小的解决方法
- Java笔记
- 堆,栈 的区别
- java实现一个小数字游戏
- struts2的核心和工作原理
- java8-30
- java 一道练习题
- 安装MyEclipse后无法使用的问题
- Java基础语法(下)
- java实现数组的六项操作
- java解析xml文件的四种方式
- java内存调优常用命令
- 大龄屌丝自学笔记--Java零基础到菜鸟--014
- [JavaWeb基础] 014.Struts2 标签库学习
- 关于eclipse使用中,真机测试无法打开File Explorer中data目录无法打开的问题