Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Измерить и кешировать объект


Автор: oson 21.5.2013, 20:34
Как реализовать такую фичу.
Есть класс SessionsKeeper, у которого есть List<Session> sessions.
Session - это мой класс, который содержит поля id,sessionAttributes, expireDate и тп.
Когда новый клиент заходит в систему, то создается новый объект класса Session и помещается в 
в список sessions в классе SessionsKeeper.
SessionsKeeper - это singleton, который содержит список сессий для всего приложения.
Периодически запускается scheduler, который удаляет из списка sessions те сессии, у которых expireDate уже больше текущей даты.

Если количество сессий будет увеличиваться, у меня возникнет проблема с нехваткой памяти.
1. Как можно измерить размер объекта SessionsKeeper?
2. Как лучше реализовать кеширование этого объекта на жесткий диск (при достижении заданного размера) и считывания оттуда 
при запросе объекта SessionsKeeper?

Автор: Samotnik 21.5.2013, 20:49
Цитата(oson @  21.5.2013,  20:34 Найти цитируемый пост)
1. Как можно измерить размер объекта SessionsKeeper?

Можно попробывать http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/instrument/Instrumentation.html
Цитата

Returns an implementation-specific approximation of the amount of storage consumed by the specified object. The result may include some or all of the object's overhead, and thus is useful for comparison within an implementation but not between implementations. The estimate may change during a single invocation of the JVM. 

Цитата(oson @  21.5.2013,  20:34 Найти цитируемый пост)
2. Как лучше реализовать кеширование этого объекта на жесткий диск (при достижении заданного размера) и считывания оттуда 
при запросе объекта SessionsKeeper? 

Кэширование на ФС это кэш второго уровня. В Hibernate применяют http://ehcache.org/, думаю в твоей ситуации его тоже можно применить

Автор: oson 21.5.2013, 21:28
Спасибо.

Автор: jk1 26.5.2013, 10:04
oson, мне кажется Вы велосипед изобретаете. Посмотрите на https://code.google.com/p/guava-libraries/wiki/CachesExplained. Он легкий и умеет все, что Вы пытаетесь реализовать: удаление элементов по времени, по количеству, слабые ссылки, что бы не съесть слишком много памяти - все там работает из коробки.

Автор: batigoal 28.5.2013, 08:08
+1 за Guava. Хотя из коробки он на диск сохранять и не умеет, но можно повесить лисенеры на загрузку-вугрузку значений из кеша, и реализовать эту логику в них.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)