Я хочу создать LinkedHashMap, который ограничит его размер на основе доступной памяти (т. Е. Когда freeMemory + (maxMemory - allocatedMemory)
становится ниже определенного порога). Это будет использоваться как форма кеша, возможно, используя «наименее недавно использованную» в качестве стратегии кэширования.LRU LinkedHashMap, который ограничивает размер на основе доступной памяти
Моя озабоченность тем, что выделенная память также включает в себя (я предполагаю) данные, собранные без мусора, и, таким образом, будет чрезмерно оценивать объем используемой памяти. Я обеспокоен непредвиденными последствиями, которые это может иметь.
Например, LinkedHashMap может продолжать удалять элементы, поскольку он считает, что свободной памяти недостаточно, но свободная память не увеличивается, потому что эти удаленные элементы не собираются немедленно сбрасывать мусор.
Есть ли у кого-нибудь опыт в этом отношении? Является ли мое беспокойство оправданным? Если да, может ли кто-нибудь предложить хороший подход?
Я должен добавить, что я также хочу, чтобы иметь возможность «блокировать» кеш, в основном говоря «хорошо, отныне ничего не удалять из-за проблем с использованием памяти».
Какое приложение? Трудно придумать хороший ответ, не имея представления о том, каково фоное намерение. Является ли ваш HashMap кешем или что? – jprete
jprete, я попытался прояснить это - вы правы, его кеш – sanity
Это типичный пример того, где GC и управление памятью Java показывают свое реальное грязное лицо. Было бы так просто * сделать такое на C++. Используя GC, вы не можете выполнять команды типа delete или free. –