缓存进行曲之java缓存
Posted watchdogzhb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存进行曲之java缓存相关的知识,希望对你有一定的参考价值。
jvm缓存就是创建一些全局变量,如 Map、List
之类的容器用于存放数据。
这样的优势是使用简单但是也有以下问题:
1、只能显式的写入,清除数据。
2、不能按照一定的规则淘汰数据,如 LRU,LFU,FIFO
等。
3、清除数据时的回调通知。
4、其他一些定制功能等。
java的三种缓存
LFU(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其核心思想是“如果数据过去被访问多次,那么将来被访问的频率也更高”。具体实现:每个数据块有一个引用计数,数据块根据计数排序,相同计数按时间排序。新插入数据到队列尾部(计数为1),访问之后计数加一,队列重新排序。淘汰数据时删除队列最后的数据。
LRU(Least Recently Used) “最近最少使用”。原理:按照近期访问最少到访问最多的顺序存储元素,LinkedHashMap提供了LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder)构造函数,该哈希映射的迭代顺序就是最后访问其条目的顺序,这种映射很适合构建LRU缓存。LinkedHashMap提供了removeEldestEntry(Map.Entry<K,V> eldest)方法。该方法在每次添加新条目时移除最旧条目,但该方法默认返回false,这样,此映射的行为将类似于正常映射,即永远不能移除最旧的元素。因而需要重写该方法。
以上是关于缓存进行曲之java缓存的主要内容,如果未能解决你的问题,请参考以下文章
Android之ListView异步加载网络图片(优化缓存机制)