您的位置:网站首页 > Java工具 > 正文

谷歌Java开发工具包之Cache缓存源码分析(一

类别:Java工具 日期:2018-5-6 20:45:00 人气: 来源:

  本篇文章是对Google的Guava中Cache进行一个源码级的分析,因为篇幅有限,而单单就LocalCache的量就达到了5000+行,还是有很多细节无法展现出来,富文本格式代码展示不太容易,就用了图片来替换.尽量让格式看起来好点.

  Cache本质上就是ConcurrentMap,区别是:Cache除了拥有Map集合属性,为了内存使用还拥有可设置的自动移除的策略,而ConcurrentMap只是数据结构,会一直保存数据,直到显式移除.

  提供了build方法的两种返回类型,其分别创建两种类型的缓存器,这两种类型的缓存器都属于LocalCache的内部类,

  CacheBuilder的内部属性(下文有详细),会为LocalCache缓存的生命周期等操作赋值(注意看构造中参数):

  1. 自动从数据源加载到缓存中 其是实现LoadingCache接口是对Cache接口的一个扩展,eg:实现了自动从CacheLoading中加载数据

  我们可以想到当如果是继承了Cache接口就要实现从Callable中获取,如果继承了LoadingCache就可以提前从创建时候指定的CacheLoader中获取.

  LocalCache是缓存的最终实现类,大部分逻辑代码都在改类中编写通过该类分析,该类中包含了很多的静态内部类和接口定义阅读源码学习

  当你看到这里,相信你对Guava的设计架构已经有一个大概的认识,现在我们开始了解一下细节的问题

  3. Cache的数据格式和ConcurrentMap是一样的,那么他的数据结构到底是什么样的?来提高效率的?

  (首先设置默认值,当,this.值不等于默认值,说明已经赋值过,在赋值就报错),之所以说是细节,是因为大部分人不会注意到,学到就要用到奥!

  Cache的数据格式和ConcurrentMap是一样的,那么他的数据结构到底是什么样的?来提高效率的?

  我的步骤是这样的,因为当我们在添加缓存的时候,都默认是Strong强引用,guava既然支持引入回收,那么他肯定是在报错的时候,对我们的数据,进行了wrap

  在setValue中我们找到了包装的代码:即将缓存的key和value包装为用户设置cache的引用方式

  我们再来看Guava缓存中的引用是如何定义的! 这里不做详细介绍,如果不懂,可以看大部分Java程序猿所不了解的引用关系

  相信当大家看到这里的时候,对CacheBuilder有正确的认识之后,基本就不用介绍了吧! 直接撸代码

  

0
0
0
0
0
0
0
0
下一篇:没有资料

相关阅读

网友评论 ()条 查看

姓名: 验证码: 看不清楚,换一个

推荐文章更多

热门图文更多

最新文章更多

关于联系我们 - 广告服务 - 友情链接 - 网站地图 - 版权声明 - 人才招聘 - 帮助

郑重声明:本站资源来源网络 如果侵犯了你的利益请联系站长删除

CopyRight 2010-2012 技术支持 FXT All Rights Reserved