我正在尝试使用 LinkedHashMap 作为本地 FIFO 缓存解决方案,覆盖其 removeEldestEntry 方法以保持大小固定:
Map lhm = new LinkedHashMap(MAX_CACHE_SIZE + 1, .75F, false) {
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_CACHE_SIZE;
}
};
但是当我不断向映射监视进程内存添加新条目时,我发现它一直在增长,直到使用最大虚拟机内存,尽管映射大小没有增加。
是设计使然吗?如果旧值被丢弃并且地图的大小受到限制,为什么它需要更多内存?
更新:根据要求,我附上了完整的代码:
@Test
public void mapMemory() {
final int MAX_CACHE_SIZE = (int) 1E3;
Map lhm = new LinkedHashMap(MAX_CACHE_SIZE + 1, 1F, false) {
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_CACHE_SIZE;
}
};
for (long i = 0; i < 1E10; i++) {
lhm.put("key_" + i, "VALUE");
}
}