JAVA中WeakHashMap的应用场景
WeakHashMap是啥:
WeakHashMap和HashMap都是通过"拉链法"实现的散列表。它们的源码绝大部分内容都一样,这里就只是对它们不同的部分就是说明。
WeakReference是“弱键”实现的哈希表。它这个“弱键”的目的就是:实现对“键值对”的动态回收。当“弱键”不再被使用到时,GC会回收它,WeakReference也会将“弱键”对应的键值对删除。
“弱键”是一个“弱引用(WeakReference)”,在Java中,WeakReference和ReferenceQueue 是联合使用的。在WeakHashMap中亦是如此:如果弱引用所引用的对象被垃圾回收,Java虚拟机就会把这个弱引用加入到与之关联的引用队列中。 接着,WeakHashMap会根据“引用队列”,来删除“WeakHashMap中已被GC回收的‘弱键’对应的键值对”。
实际的应用:
可以使用WeakhashMap实现一个线程安全的基于LRU本地缓存
在Tomcat的工具类里,有这样一种实现。基于LRU策略,很巧妙。
Github :https://github.com/apache/tomcat/blob/3e5ce3108e2684bc25013d9a84a7966a6dcd6e14/java/org/apache/tomcat/util/collections/ConcurrentCache.java
WeakHashMap
在原有基础上,我做了改进,使用 volatile 和静态工厂的方式实现,只是个人想法,不足之处请小伙伴指出来。
LinkedHashMap
当然,对于本地缓存,我们也可以使用 基于 LinkedHashMap 的实现缓存工具类,基于volatile 实现LRU策略线程安全缓存
测试文档
- 点赞
- 收藏
- 关注作者
评论(0)