LruCache缓存方法
package android.util;
public class LruCache <K, V>{public LruCache(int maxSize){}...
}
LRU是Least Recently Used 近期最少使用算法。内存管理的一种页面置换算法,对于在内存中但又不用的数据块(内存块)叫做LRU,操作系统会根据哪些数据属于LRU而将其移出内存.
明白了LRU,从字面意思就能明白LruCache的作用了。
先看看developer怎么说:
A cache that holds strong references to a limited number of values.Each time a value is accessed,it is moved to the head of a queue.When a value is added to a full cache ,the value at the end of that queue is evicted and may become eligible for garbage collection.
这段说的是它的原理,之后的说的是它的方法,就不写上来了。
LruCache使用强引用hold住制定数量的资源不被回收掉,又按照LRU的规则,把后进来的放进队列的头部,当加入的数据超过指定的size的时候从队尾开始删除。
列一下它所有的方法:
public final V get(K key) { /* compiled code */ }public final V put(K key, V value) { /* compiled code */ }public void trimToSize(int maxSize) { /* compiled code */ }public final V remove(K key) { /* compiled code */ }protected void entryRemoved(boolean evicted, K key, V oldValue, V newValue) { /* compiled code */ }protected V create(K key) { /* compiled code */ }protected int sizeOf(K key, V value) { /* compiled code */ }public final void evictAll() { /* compiled code */ }public final synchronized int size() { /* compiled code */ }public final synchronized int maxSize() { /* compiled code */ }public final synchronized int hitCount() { /* compiled code */ }public final synchronized int missCount() { /* compiled code */ }public final synchronized int createCount() { /* compiled code */ }public final synchronized int putCount() { /* compiled code */ }public final synchronized int evictionCount() { /* compiled code */ }public final synchronized java.util.Map<K,V> snapshot() { /* compiled code */ }public final synchronized java.lang.String toString() { /* compiled code */ }
}
典型的数据结构方法,存取计数一类。
private LruCache<Integer, String> mCache;int size = 5;mCache = new LruCache<Integer,String>(size){@Overrideprotected int sizeOf(Integer key,String value){return 0;}};for(int i=0;i <10;i++) {mCache.put(i, "i");}for(int i=0;i <10;i++) {String tempValue = mCache.get(i);if(tempValue ==null) {mCache.put(i, "i");}}System.out.println(mCache);
因为看到有toString方法,所以想着打印一下,
I/System.out(6418): LruCache[maxSize=5,hits=10,misses=0,hitRate=100%]
打印出来的LruCache包含了最大值maxSize,hits,hitRate,misses命中率的内容。
因为我们put了K,V进去所以读取的时候可以命中,如果没有提前put键值对进去命中率就会反过来。
至此简单的LruCache基本明了。
LruCache缓存方法相关推荐
- LruCache缓存
Lru算法: Lru 指的是"Least Recently Used-近期最少使用算法". 1.那么LruCache到底是什么呢? LruCache 是对限定数量的缓存对象持有强引 ...
- 使用JCache缓存方法结果
在JCache中,有一个方便的功能可以透明地缓存方法的结果. 您可以使用@CacheResult注释托管bean的方法,并且将再次返回第一次调用的结果,而无需再次调用实际方法. import java ...
- java 缓存方法_Java实现一个简单的缓存方法
Java实现一个简单的缓存方法 发布时间:2020-09-07 21:39:55 来源:脚本之家 阅读:99 作者:BrightLoong 缓存是在web开发中经常用到的,将程序经常使用到或调用到的对 ...
- 强制清理CDN(DNS)缓存方法
强制清理CDN(DNS)缓存方法/步骤 1.打开命令对话框:开始--cmd--确定 2.在CMD命令操作框上输入清空DNS缓存的命令,命令为:ipconfig/flushdns ,然后回车即可清除DN ...
- android h5游戏图片不缓存,H5小游戏资源缓存方法与流程
本发明涉及H5资源缓存领域,尤其涉及H5小游戏资源缓存方法. 背景技术: 随着移动互联网的发展和手机硬件性能的不断提升,H5小游戏这种不需要下载安装即可使用的全新游戏应用得到了爆发式发展.这种用完即走 ...
- Firefox和IE浏览器清除缓存方法
工具 =>Internet选项 =>浏览历史记录 =>删除 =>选中Internet临时文件夹 =>确定 请仔细对照上图,删除缓存避免调试程序时不刷新问题. Firefo ...
- 常见浏览器清理缓存方法
各大常见浏览器清理缓存方法 360浏览器: https://jingyan.baidu.com/article/fedf0737486f2b35ac89772e.html 360极速浏览器:https ...
- 微信内置浏览器清理缓存方法
目前感觉大部分所接触过的项目,目标用户几乎都是使用微信浏览器打开的,在一定程度来说,发布测试版还有本地测试的过程中,微信这种怎么也清不掉的缓存真的很烦人. 下面直入正题, 给出清除微信浏览器缓存的终极 ...
- php 微信怎么清除缓存,前端清除缓存方法(微信缓存引起的bug)
bug1:在新版微信中,部门安卓机子(华为)出现window.location.href/window.location.reload....等方法来刷新本页面链接,发现页面没有被刷新,经过排查,发现 ...
最新文章
- 【原】Java学习笔记020 - 面向对象
- 深圳python如何评价_Python分析18万条《八佰》影评,看看观众怎么说?
- linux输入ls后不显示_零基础学习之Linux基础命令小结
- java封装概念_Java面向对象----封装概念
- 迭代列表不要For循环,这是Python列表推导式最基本的概念
- python实现pdf解密和pdf转图片
- Android 5.0新特性
- for 循环 and while 循环(四)
- springboot+junit测试
- 关于利用border-radius变形后,margin的参照对象
- linux查文件被哪些程序占用—fuser和lsof的使用
- html鼠标移动图片自动放大,当鼠标移动到图片上时跟随鼠标显示放大的图片效果...
- Apache的网页优化!!给你的网页套上一层层保护罩(网页压缩、网页缓存、隐藏版本信息、设置防盗链)
- java支付宝提现发请求没反应_支付宝调用页面无法显示
- 移动终端基带芯片的基本架构介绍之一(arm框架的软硬件组合)
- 一个奇鸽船新体验:类似的木函软件
- cad快速选择命令快捷键_CAD快捷键命令:倒角的使用技巧
- PowerPC的嵌入式Linux培训大纲
- 计算机要素--第六章 汇编编译器
- L1-039 古风排版-java