我試圖使用的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");
}
}
爲什麼不使用一個實際的FIFO數據結構,而不是試圖模仿一個用一個HashMap? – GordonM
我需要它能夠通過鍵檢索值。什麼是FIFO解決方案? – wziska