Я пытаюсь использовать 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