tomcat 源码中的简易缓存 ConcurrentCache##
链接: 关于tomcat源码包中 org.apache.el.util.ConcurrentCache 线程安全缓存,
是基于java.util.concurrent.ConcurrentHashMap 和 java.util.WeakHashMap 实现的,存放固定大小的数据 java.util.concurrent.ConcurrentHashMap ,当超过固定大小的数据存放在 java.util.WeakHashMap 中,当jvm进行垃圾回收时候,
java.util.WeakHashMap 的内容会被回收掉,以此保证多余的缓存不占用过多的内存。简单实用
看代码的流程非常向浇灌田地的水车系统中的那个水桶
再看下 jdk 的 WeakHashMap 的实现
主要依赖ReferenceQueue queue 和 WeakReference ,这对组合是 jvm 发生垃圾回收时,将WeakReference实现类存放到 ReferenceQueue 中,但是此时 WeakReference 的 T referent 已经jvm被回收。WeakHashMap 的get 和put 和 size 方法中会循环 ReferenceQueue 然后重新调整table 的大小