LruCache原理简要理解

声明:
        本文为读完 https://www.cnblogs.com/liuling/archive/2015/09/24/2015-9-24-1.html帖子后,对照android源码写出的自己的理解,如有侵犯他人版权,请留言联系本人删除。

原理:
        LruCache(Last Recently Used Cache),顾名思义,按照使用频率进行排序的缓存。实现方式采用双向链表(LinkedHashMap),获取或存入时,把最新操作的缓存都放入链表尾端,使尾部为最近使用缓存,首部为相对不常用缓存。每次新放入缓存时,都去判断当前缓存大小是否超过设定的缓存最大值,如果超出,则循环删除首端缓存,直到缓存大小不大于最大值为止。

源码变量及函数整理

LruCache{
private final LinkedHashMap< K , V > map ;
private int size ; //当前cache的大小
private int maxSize ; //cache最大大小
private int putCount ; //存入次数
private int createCount ; //创建次数
private int evictionCount ; //回收次数
private int hitCount ; //命中次数
private int missCount ; //未命中次数

//传入缓存最大个数,创建一个LinkedHashMap
public LruCache( int maxSize);
//把缓存的最大大小赋值成传入值,然后按照这个值清理缓存(trimToSize)。
public void resize( int maxSize);
/**
  * 如果缓存中有的话,获取返回内容,如果缓存中没有,执行创建函数,创建函数如果不重写默认返回空
  * 如果重写了,则创建,加入缓存,变更当前缓存大小,缓存最大值为不变,重新整理缓存。
  */
public final V get( K key);
//放入缓存列表,变更当前缓存大小,缓存最大值不变,整理缓存。
public final V put( K key, V value);
/**
  *整理缓存的大小,传入目标整理最大值(整理后最大值),把原有的不常用的缓存删掉,直到缓存大小小于或          
  *等于传入的maxSize停止清理。
  */
public void trimToSize( int maxSize);
//删除缓存内容,变更当前缓存大小,不整理缓存。
public final V remove( K key);

protected void entryRemoved( boolean evicted, K key, V oldValue, V newValue);
protected V create( K key) { return null ;}
private int safeSizeOf( K key, V value);
protected int sizeOf( K key, V value){ return 1;};
public final void evictAll(){trimToSize(- 1 );}
public synchronized final int size(){ return size ;}
public synchronized final int maxSize(){ return maxSize ;}
public synchronized final int hitCount(){ return hitCount ;}
public synchronized final int missCount(){ return missCount; };
public synchronized final int createCount(){ return createCount ;}
public synchronized final int putCount(){ return putCount ;}
public synchronized final int evictionCount (){ return evictionCount ;}
public synchronized final Map< K , V > snapshot(){ return new LinkedHashMap< K , V >( map );}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值