补充caffeine关于软引用和弱引用的文档阅读

This commit is contained in:
2023-05-21 23:54:54 +08:00
parent d01dd144f4
commit 8d6e169b8c

View File

@@ -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
caffeine是一个高性能的java缓存库其几乎能够提供最佳的命中率。 caffeine是一个高性能的java缓存库其几乎能够提供最佳的命中率。
cache类似于ConcurrentMap但并不完全相同。在ConcurrentMap中会维护所有添加到其中的元素直到元素被显式移除而Cache则是可以通过配置来自动的淘汰元素从而限制cache的内存占用。   cache类似于ConcurrentMap但并不完全相同。在ConcurrentMap中会维护所有添加到其中的元素直到元素被显式移除而Cache则是可以通过配置来自动的淘汰元素从而限制cache的内存占用。  
@@ -199,5 +221,14 @@ LoadingCache<Key, Graph> graphs = Caffeine.newBuilder()
.expireAfterWrite(10, TimeUnit.MINUTES) .expireAfterWrite(10, TimeUnit.MINUTES)
.build(key -> createExpensiveGraph(key)); .build(key -> createExpensiveGraph(key));
``` ```
scheduler可以用于及时的清理过期缓存 scheduler可以用于及时的清理过期缓存
### 软引用和弱引用
caffeine支持基于引用来设置淘汰策略。caffeine支持针对key和value使用弱引用针对value使用软引用。
#### weakKeys
`caffeine.weakKeys()`存储使用弱引用的key如果没有强引用指向key那么key将会被垃圾回收。垃圾回收时只会比较对象地址故而整个缓存在比较key时会通过`==`而不是`equals`来进行比较
#### weakValues
`caffeine.weakValues()`存储使用弱引用的value如果没有强引用指向valuevalue会被垃圾回收。同样地在整个cache中会使用`==`而不是`equals`来对value进行比较
#### softValues
软引用的value通常会在垃圾回收时按照lru的方式进行回收根据内存情况决定是否进行回收。由于使用软引用会带来性能问题通常更推荐使用基于max-size的回收策略。
同样地基于软引用的value在整个缓存中会通过`==`而不是`equals()`来进行垃圾回收。