我试图使用的LinkedHashMap作为本地FIFO缓存解决方案覆盖它removeEldestEntry方法,以保持大小固定:固定大小LinkedHashMap内存泄漏?
Map lhm = new LinkedHashMap(MAX_CACHE_SIZE + 1, .75F, false) {
protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_CACHE_SIZE;
}
};
,但是当我不断地添加新条目到地图监控进程内存我看到它不断增长,直到虽然地图大小不会增加,但会使用最大虚拟机内存。
是否由设计?为什么需要更多的内存,如果旧的值被丢弃,地图的大小是有限的?
UPDATE: 的要求,我附上全码:
@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");
}
}
2013-10-28
wziska
+0
为什么不使用一个实际的FIFO数据结构,而不是试图模仿一个用一个HashMap? –
+0
我需要它能够通过键检索值。什么是FIFO解决方案? –