Java实现,用HashMap保存关系{key值 : 命中次数与上次命中时间},当需要淘汰某个key值时,调用map.remove(key)。
import java.util.*;
public class LFUAgingMap<K, V> extends HashMap<K, V> {
private static final int DEFAULT_MAX_SIZE = 3;
private int maxSize = DEFAULT_MAX_SIZE;
Map<K, HitRate> km = new HashMap<K, HitRate>();
public LFUAgingMap() {
this(DEFAULT_MAX_SIZE);
}
public LFUAgingMap(int maxSize) {
super(maxSize);
this.maxSize = maxSize;
}
@Override
public V get(Object key) {
V v = super.get(key);
if (v != null) {
HitRate hitRate = km.get(key);
hitRate.hitCount += 1;
hitRate.atime = System.nanoTime();
}
return v;
}
@Override
public V put(K key, V value) {
while (km.size() >= maxSize) {
K k = getLFUAging();
km.remove(k);
this.remove(k);
}
V v = s

本文介绍了如何使用Java实现LFU-Aging缓存淘汰算法,通过HashMap存储键值对,其中键对应的值为命中次数和上次命中时间。在需要淘汰缓存时,通过调用map.remove(key)来移除相应项。
&spm=1001.2101.3001.5002&articleId=45705307&d=1&t=3&u=cb5bdd9382e2499d99061fc5d236b507)
3214

被折叠的 条评论
为什么被折叠?



