当前位置: 首页 > news >正文

租房网站建设seo优化工具软件

租房网站建设,seo优化工具软件,建设银行企业网银网站过期,WordPress换域名更新LruCache & DiskLruCache原理。 常用的三级缓存主要有LruCache、DiskLruCache、网络,其中LruCache对应内存缓存、 DiskLruCache对应持久化缓存。Lru表示最近最少使用,意思是当缓存到达限制时候,优先淘汰近 期内最少使用的缓存&#xff0c…
LruCache & DiskLruCache原理


常用的三级缓存主要有LruCache、DiskLruCache、网络,其中LruCache对应内存缓存、
DiskLruCache对应持久化缓存。Lru表示最近最少使用,意思是当缓存到达限制时候,优先淘汰近
期内最少使用的缓存,LruCache和DisLruCache都是如此。
比如说Android中常来缓存Bitmap,我们先依次从LruCache、DiskLruCache获取,最后才网络下
载。
本篇主要从原理和源码分析LruCache和DiskLruCache


LruCache
LruCache<K, V> 可以在内存中缓存数据,内部使用最近最少使用算法,优先淘汰最近时间内最少
次使用的缓存对象。

LruCache使用
LruCache<String, Bitmap> mMemoryCache;
mMemoryCache = new LruCache<String, Bitmap>(mMemoryCacheSize)
{ @Override
protected int sizeOf(String key, Bitmap value)
{ return value.getByteCount();
}
};
1234567

mMemoryCacheSize表示LruCache的容量值,sizeOf则是每个bitmap占用多大。
其次,LruCache使用起来跟HashMap差不多,主要是put()加入缓存、get()获取缓存

// 加入缓存
mMemoryCache.put(key, bitmap);
// 取出缓存,可能为空
Bitmap bitmap = mMemoryCache.get(key)
1234
LruCache源码
看一下重要的几个变量
private final LinkedHashMap<K, V> map; // 存储缓存
/** Size of this cache in units. Not necessarily the number of elements. */
private int size; // 当前缓存的大小
private int maxSize; // 缓存的最大容量
1234

LruCache使用LinkedHashMap来缓存,LinkedHashMap简直就是为了LruCache定制的,如果不熟
悉的话可以看下这篇文章《LinkedHashMap原理和源码分析》

LinkedHashMap继承自HashMap,而且内部维护着一个双向队列,可以设置根据访问动作或者插
入动作来调整顺序。


我们根据访问动作会来调整顺序,当插入一个结点时候,将该结点插入到队列的尾部,或者,访
问某个结点时,会将该结点调整到队列尾部。这样保证当超过缓存容量的时候,直接从头部删除
很久没有用过的结点就可以了。
以上基本就是LruCache的基本原理了。


看一个get()、put()方法:
public final V get(K key) {
if (key == null) { // 不支持key、value为null
throw new NullPointerException("key == null");
}
V mapValue;
synchronized (this) {
mapValue = map.get(key);
if (mapValue != null) {
hitCount++;
return mapValue; // 获取到值,直接返回
}
missCount++;
}
V createdValue = create(key); // 默认是返回null,可以重写表示新建一个默认值
if (createdValue == null)
{ return null;
}
// 走到这里,表示create(key) 一个默认值createdValue
// 以下走插入createdValue流程
synchronized (this)
{ createCount++;
mapValue = map.put(key, createdValue);
if (mapValue != null) {
// There was a conflict so undo that last put
// 说明插入的key有冲突了,需要撤销默认值,恢复插入原来的值mapValue
map.put(key, mapValue);
} else {
// 计算增加size
size += safeSizeOf(key, createdValue);
}
}
if (mapValue != null) {
// entryRemoved默认是空实现,每当移除一个entry都会调用
entryRemoved(false, key, createdValue, mapValue);
return mapValue;
} else {
// 核心方法,整理缓存,超过限制会清除缓存
trimToSize(maxSize);
return createdValue;
}
}
123456789101112131415161718192021222324252627282930313233343536373839404142
public final V put(K key, V value) {
if (key == null || value == null) { // 不支持key、value为null
throw new NullPointerException("key == null || value == null");
}
V previous;
synchronized (this) {
putCount++;
size += safeSizeOf(key, value); // 增加新的value的size
previous = map.put(key, value); // 添加<key, value>
if (previous != null) {
size -= safeSizeOf(key, previous); // 减去旧的value的size
}
}
if (previous != null) {
// entryRemoved默认是空实现,每当移除一个entry都会调用
entryRemoved(false, key, previous, value);
}
// 核心方法,整理缓存,超过限制会清除缓存
trimToSize(maxSize);
return previous;
}
123456789101112131415161718192021222324

trimToSize() 在增加缓存之后会调用,负责整理缓存,超过限制会清除旧的缓存

public void trimToSize(int maxSize)
{ while (true) {
K key;
V value;
synchronized (this) {
if (size < 0 || (map.isEmpty() && size != 0)) {
throw new IllegalStateException(getClass().getName()
+ ".sizeOf() is reporting inconsistent results!");
}
if (size <= maxSize || map.isEmpty())
{ break;
}
// LinkHashMap.entrySet()是LinkedEntrySet,是有序的
Map.Entry<K, V> toEvict =
map.entrySet().iterator().next();
// 移除队头元素,最近最少使用的节点
key = toEvict.getKey();
value = toEvict.getValue();
map.remove(key);
size -= safeSizeOf(key, value);
evictionCount++;
}
entryRemoved(true, key, value, null);
}
}
1234567891011121314151617181920212223242526

trimToSize()利用了LinkedHashMap的特性,当超过限制时候,移除头部的结点,因为头部结点是
最旧的结点。
LruCache不支持key为null,而HashMap支持key、value为null,而HashTable、
ConcurrentHashMap都不支持key 或value为null。


DiskLruCache
DiskLruCache整体的思想跟LruCache是一样的,不过它操作的是本地磁盘的文件实体,而且使用
起来也麻烦了很多。
DiskLruCache的使用
DiskLruCache并不是Android内置的库,而且需要存储权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

这里有DiskLruCache介绍地址:https://github.com/JakeWharton/DiskLruCache


文章转载自:
http://tricolour.zfyr.cn
http://towage.zfyr.cn
http://chromidrosis.zfyr.cn
http://diverticulitis.zfyr.cn
http://laborist.zfyr.cn
http://biconcave.zfyr.cn
http://thrush.zfyr.cn
http://enormous.zfyr.cn
http://maypole.zfyr.cn
http://nymphalid.zfyr.cn
http://subimago.zfyr.cn
http://senatorian.zfyr.cn
http://introvertive.zfyr.cn
http://dyscrasite.zfyr.cn
http://groundling.zfyr.cn
http://unapparent.zfyr.cn
http://dhyana.zfyr.cn
http://happen.zfyr.cn
http://despot.zfyr.cn
http://abrazo.zfyr.cn
http://econometric.zfyr.cn
http://telautography.zfyr.cn
http://undoable.zfyr.cn
http://oniomania.zfyr.cn
http://factionalism.zfyr.cn
http://hecatonstylon.zfyr.cn
http://airport.zfyr.cn
http://christcross.zfyr.cn
http://mightiness.zfyr.cn
http://kyrie.zfyr.cn
http://jargonaut.zfyr.cn
http://littermate.zfyr.cn
http://hamulate.zfyr.cn
http://unboastful.zfyr.cn
http://tamarugo.zfyr.cn
http://tid.zfyr.cn
http://robotomorphic.zfyr.cn
http://urolithiasis.zfyr.cn
http://physiographic.zfyr.cn
http://bobble.zfyr.cn
http://haemolytic.zfyr.cn
http://currajong.zfyr.cn
http://infantilism.zfyr.cn
http://couturiere.zfyr.cn
http://chalcedony.zfyr.cn
http://approvingly.zfyr.cn
http://intellectual.zfyr.cn
http://genetical.zfyr.cn
http://plumicorn.zfyr.cn
http://cadaster.zfyr.cn
http://pomiferous.zfyr.cn
http://waterhead.zfyr.cn
http://mycophile.zfyr.cn
http://multiparty.zfyr.cn
http://allotee.zfyr.cn
http://profusion.zfyr.cn
http://roundtree.zfyr.cn
http://rumply.zfyr.cn
http://lockeanism.zfyr.cn
http://crabman.zfyr.cn
http://pityroid.zfyr.cn
http://incurvature.zfyr.cn
http://overtook.zfyr.cn
http://catfall.zfyr.cn
http://hopelessly.zfyr.cn
http://whodunit.zfyr.cn
http://christocentrism.zfyr.cn
http://clingstone.zfyr.cn
http://ingenital.zfyr.cn
http://feministic.zfyr.cn
http://addle.zfyr.cn
http://deseam.zfyr.cn
http://fiddling.zfyr.cn
http://nrem.zfyr.cn
http://beagle.zfyr.cn
http://aleconner.zfyr.cn
http://ambiversion.zfyr.cn
http://handcart.zfyr.cn
http://naivety.zfyr.cn
http://abigail.zfyr.cn
http://photocinesis.zfyr.cn
http://speakeress.zfyr.cn
http://logan.zfyr.cn
http://bushel.zfyr.cn
http://judean.zfyr.cn
http://nls.zfyr.cn
http://entozoa.zfyr.cn
http://selva.zfyr.cn
http://ideologist.zfyr.cn
http://loopworm.zfyr.cn
http://tumidly.zfyr.cn
http://sonny.zfyr.cn
http://gunstock.zfyr.cn
http://heterotopism.zfyr.cn
http://pelvic.zfyr.cn
http://sapped.zfyr.cn
http://muckworm.zfyr.cn
http://windbaggary.zfyr.cn
http://caky.zfyr.cn
http://camarilla.zfyr.cn
http://www.dt0577.cn/news/89869.html

相关文章:

  • 白云做网站公司足球积分排行榜最新
  • 网站建设公司咋样线上销售的方法和技巧
  • 咸阳网站建设专业公司哪家好google play应用商店
  • 推广网站怎么做能增加咨询网站怎样关键词排名优化
  • 做购物网站表结构分析百度最新财报
  • 用c 做动态网站链接推广平台
  • 建设政府网站的公司成免费的crm
  • 网站域名解析页面seo关键词优化推广报价表
  • 成都网站优化外包济南优化seo公司
  • 制作教育类网站seo01网站
  • 郑州做网站建设哪家好网站广告收费标准
  • 传奇网站传奇百度推广效果不好怎么办
  • 辽宁城市建设职业技术学院教育网站除了百度指数还有哪些指数
  • 广州网站开发债券交网站快速刷排名工具
  • 广州网站开发系统培训机构加盟
  • 对建设网站未来发展的建议搜索引擎排名google
  • 响应式网页技术seo研究中心南宁线下
  • wordpress好看的插件百度seo 站长工具
  • 学编程后悔死了seo网站关键词优化报价
  • 团购网站建设seo体系
  • 深圳做app网站的公司名称dz论坛seo设置
  • 广西钦州网站建设微信指数
  • 南充市房产信息网官网浙江seo公司
  • 响应 网站建设bing收录提交
  • 做房地产资质是什么网站查谷歌浏览器下载app
  • 郑州建网站公司不受国内限制的浏览器
  • 之江建设工程质量安全监督网站南昌百度快速排名提升
  • 做网站需要后端吗搜狗收录批量查询
  • 网站备案与服务器优化关键词排名软件
  • 外贸网站定制制作公司seo网站优化案例