У вас есть две проблемы: выяснить, сколько памяти используется, и управлять кешем. Я не уверен, что они действительно тесно связаны, хотя они могут быть.
Узнать, сколько памяти использует объект, не так уж сложно: одна превосходная статья, которую вы можете использовать для справки, - это " Sizeof for Java " от JavaWorld. Он избегает всего фиаско сборки мусора, в котором есть множество дыр (он медленный, он не считает объект, а кучу - это означает, что другие объекты учитывают ваши результаты, которые вы, возможно, не хотите, и т. Д.)
Управление временем для инициализации кэша является еще одной проблемой. Я работаю в компании, у которой есть сетка данных как продукт, и поэтому я предвзят; будь в курсе.
Одна опция вообще не использует кеш, а использует сетку данных. Я работаю на GigaSpaces Technologies , и я чувствую, что наши лучшие; мы можем загружать данные из базы данных при запуске и хранить ваши данные там как распределенное транзакционное хранилище данных в памяти (так что ваша самая большая стоимость - доступ к сети). У нас есть версия для сообщества, а также полнофункциональные платформы, в зависимости от вашей Нужен и бюджет. (Выпуск для сообщества бесплатный.) Мы поддерживаем различные протоколы, включая JDBC, JPA, JMS, Memcached, API-интерфейс Map (аналогичный JCache) и собственный API.
Другие подобные опции включают Coherence, которая сама является сеткой данных, и Terracotta DSO, которая может распределять граф объектов в куче JVM.
Вы также можете посмотреть на сами проекты кеша: два включают Ehcache и OSCache. (Опять же: предвзятость. Я был одним из тех, кто запустил OpenSymphony, поэтому у меня есть слабое место для OSCache.) В вашем случае, что произойдет, это не предварительная загрузка кеша - обратите внимание, что я не знаю вашего приложения так что я догадываюсь и могу ошибаться - но кеш по запросу. Когда вы получаете данные, вы сначала проверяете кеш на данные и извлекаете их из БД, только если данные не находятся в кеше, и загружаете кеш при чтении.
Конечно, вы также можете посмотреть на memcached, хотя я, очевидно, предпочитаю предложение моего работодателя здесь.