补充caffeine关于软引用和弱引用的文档阅读
This commit is contained in:
@@ -1,3 +1,25 @@
|
||||
- [caffeine](#caffeine)
|
||||
- [Cache](#cache)
|
||||
- [注入](#注入)
|
||||
- [手动](#手动)
|
||||
- [Loading](#loading)
|
||||
- [异步(手动)](#异步手动)
|
||||
- [Async Loading](#async-loading)
|
||||
- [淘汰](#淘汰)
|
||||
- [基于时间的](#基于时间的)
|
||||
- [基于时间的淘汰策略](#基于时间的淘汰策略)
|
||||
- [基于引用的淘汰策略](#基于引用的淘汰策略)
|
||||
- [移除](#移除)
|
||||
- [removal listener](#removal-listener)
|
||||
- [compute](#compute)
|
||||
- [统计](#统计)
|
||||
- [cleanup](#cleanup)
|
||||
- [软引用和弱引用](#软引用和弱引用)
|
||||
- [weakKeys](#weakkeys)
|
||||
- [weakValues](#weakvalues)
|
||||
- [softValues](#softvalues)
|
||||
|
||||
|
||||
# caffeine
|
||||
caffeine是一个高性能的java缓存库,其几乎能够提供最佳的命中率。
|
||||
cache类似于ConcurrentMap,但并不完全相同。在ConcurrentMap中,会维护所有添加到其中的元素,直到元素被显式移除;而Cache则是可以通过配置来自动的淘汰元素,从而限制cache的内存占用。
|
||||
@@ -199,5 +221,14 @@ LoadingCache<Key, Graph> graphs = Caffeine.newBuilder()
|
||||
.expireAfterWrite(10, TimeUnit.MINUTES)
|
||||
.build(key -> createExpensiveGraph(key));
|
||||
```
|
||||
scheduler可以用于及时的清理过期缓存,
|
||||
scheduler可以用于及时的清理过期缓存
|
||||
|
||||
### 软引用和弱引用
|
||||
caffeine支持基于引用来设置淘汰策略。caffeine支持针对key和value使用弱引用,针对value使用软引用。
|
||||
#### weakKeys
|
||||
`caffeine.weakKeys()`存储使用弱引用的key,如果没有强引用指向key,那么key将会被垃圾回收。垃圾回收时只会比较对象地址,故而整个缓存在比较key时会通过`==`而不是`equals`来进行比较
|
||||
#### weakValues
|
||||
`caffeine.weakValues()`存储使用弱引用的value,如果没有强引用指向value,value会被垃圾回收。同样地,在整个cache中,会使用`==`而不是`equals`来对value进行比较
|
||||
#### softValues
|
||||
软引用的value通常会在垃圾回收时按照lru的方式进行回收,根据内存情况决定是否进行回收。由于使用软引用会带来性能问题,通常更推荐使用基于max-size的回收策略。
|
||||
同样地,基于软引用的value在整个缓存中会通过`==`而不是`equals()`来进行垃圾回收。
|
||||
|
||||
Reference in New Issue
Block a user