サイズを固定するために removeEldestEntry メソッドを上書きするローカル FIFO キャッシュ ソリューションとして LinkedHashMap を使用しようとしています。
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");
}
}