Я задал мне вопрос об одном и том же и не смог найти в Интернете ничего для этого.Так что я сделал это очень примитивное испытание.Я написал фрагмент кода, который создает LocalCache с самой простой настройкой (без максимального размера, без политик вытеснения, ничего) и в бесконечном цикле помещает вещи в кеш.И контролировал его через VisualVm для проверки использования кучи.
import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import java.util.concurrent.TimeUnit;
public class CacheTest {
public static void main(String[] args) {
Cache<String, String> cache = CacheBuilder.newBuilder().build();
int counter = 0;
while(true){
cache.put("key"+counter++,"value");
System.out.println("size:"+cache.size());
}
}
}
Как видно из изображения ниже, использование памяти увеличивается до максимально доступного пространства и становится постоянным.Я ждал несколько минут, и никакой ошибки OutOfMemoryError не произошло.Случилось так, что через несколько секунд на карту была добавлена одна новая запись, поэтому в будущем, вероятно, произойдет ошибка.
Вывод:Вам не нужно устанавливать значение MaximumSize, но я предлагаю вам использовать некую политику выселения (expireAfterAccess или expireAfterWrite), чтобы очистить кеш и избежать ошибки OutOfMemoryError.А также во избежание снижения производительности вашего кеша.