Guava库学习:学习Guava Cache(一)MapMaker

    链接地址:http://www.xx566.com/detail/166.html

    在软件开发中,Cache缓存技术一直是非常重要的主题,不管我们正在进行任何简单的编程工作,我们总能在编程过程中找到一些缓存机制,即使是你使用一个 Map获取静态的值,它也是缓存的一种形式,但我们大多数人并不清楚其中的缓存使用。Guava Cache为我们提供了相比于简单的HashMap更强大和灵活的缓存机制,并不像Ehcache和Memcache那样具有健壮性。在本系列的学习中, 我们将学习Guava提供的缓存机制,首先我们学习Guava Cache(一)MapMaker。

 

    我们可以在com.google.common.collect包下面找到MapMaker类,那么问题来了,我们为什么不在Guava Collections系列中 学习,尽管我们可能已经在Collections的学习中提到了MapMaker,本篇中,我们将MapMaker作为一个提供最基本缓存功能的类进行学 习,MapMaker类使用了流畅的接口API,允许我们快速的构造ConcurrentHashMap,我们来看下面的例子:

ConcurrentMap<String, Book> books = new
        MapMaker().concurrencyLevel(2)
        .softValues()
        .makeMap();

    上面的例子中,我们构造了一个ConcurrentHashMap,使用String类型作为key,使用Book对象作为value值,通过对 ConcurrentHashMap声明的泛型进行指定,我们首先调用了concurrencyLevel()方法,设置了我们允许在map中并发修改的 数量,我们还指定了softValues()方法,这样map中的value值都包裹在一个SoftReference(软引用)对象中,可以在内存过低 的时候被当作垃圾回收。

 

    其他我们可以指定的方法还包括:weakKeys()和weakValues(),但是MapMaker没有提供softKeys(),当我们给keys 或values使用WeakReferences(弱引用)或SoftReference(软引用)时,如果键值的其中一个被当做垃圾回收,整个键值对就 会从map中移除,剩余的部分并不会暴露给客户端。

 

    最后值得注意的一点:MapMaker中的softValues()方法在最近的几个guava版本中,已经被标注为 Deprecated,MapMaker中的缓存机制已经被移动到com.google.common.cache.CacheBuilder 中,MapMaker中的softValues()方法也已经被替换为com.google.common.cache.CacheBuilder#softValuesCacheBuilder的实现是来自MapMaker分支的一个简单增强版API。

转载于:https://my.oschina.net/realfighter/blog/350030

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值