缓存进行曲之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,这样,此映射的行为将类似于正常映射,即永远不能移除最旧的元素。因而需要重写该方法。

猜你喜欢

转载自www.cnblogs.com/watchdogzhb/p/10602704.html