一、前言
关于tomcat源码包中org.apache.el.util.ConcurrentCache线程安全缓存,基于java.util.concurrent.ConcurrentHashMap并发队列乐观锁控制,并对超过容器大小数据寄存在java.util.WeakHashMap弱引用MAP中(保证内存空间充足的情况,缓存超出容器大小的数据,不足的情况正常回收,不给jvm虚拟机增加空间压力)。
二、源码说明
package org.apache.el.util;@b@@b@import java.util.Map;@b@import java.util.WeakHashMap;@b@import java.util.concurrent.ConcurrentHashMap;@b@@b@public final class ConcurrentCache<K,V> {@b@@b@ private final int size;@b@@b@ private final Map<K,V> eden;@b@@b@ private final Map<K,V> longterm;@b@@b@ public ConcurrentCache(int size) {@b@ this.size = size;@b@ this.eden = new ConcurrentHashMap<K,V>(size);@b@ this.longterm = new WeakHashMap<K,V>(size);@b@ }@b@@b@ public V get(K k) {@b@ V v = this.eden.get(k);@b@ if (v == null) {@b@ v = this.longterm.get(k);@b@ if (v != null) {@b@ this.eden.put(k, v);@b@ }@b@ }@b@ return v;@b@ }@b@@b@ public void put(K k, V v) {@b@ if (this.eden.size() >= size) {@b@ this.longterm.putAll(this.eden);@b@ this.eden.clear();@b@ }@b@ this.eden.put(k, v);@b@ }@b@}