Как вызвать, в спящем режиме для освобождения памяти, после того как сеанс закрыт?

Методы получения и установки ООП не являются, и чаще всего просто удваивают размер кода, но это бесполезно.

что касается книг: паттерны проектирования (Gamma, Vlissides, Johnson, Helm), книги Фаулера (рефакторинг, шаблоны архитектуры корпоративных приложений), книги Бека (разработка через тестирование на примере, шаблоны реализации) и т. Д.

5
задан StudioEvoque 30 May 2009 в 18:30
поделиться

2 ответа

Вы можете попробовать вызвать Session.clear, чтобы принудительно очистить кеш первого уровня. Обязательно сначала вызовите Session.flush, чтобы записать любые ожидающие изменения в базу данных. Если это «решит» проблему, то я подозреваю, что что-то все еще содержит ссылку на сеанс, предотвращая сборку мусора для объектов в кеше. Возможно, вам потребуется получить дамп кучи вашей программы, чтобы отследить утечку.

10
ответ дан 13 December 2019 в 05:41
поделиться

Hibernate также имеет дополнительный кэш второго уровня, который может быть задействован. Я согласен с Робом, самый простой способ узнать это - посмотреть, что еще осталось в памяти после окончания сеанса.

В настоящее время мой любимый инструмент для этого - YourKit , который является коммерческим и не совсем дешевым. Раньше они предлагали (и все еще могут предлагать) вариант личной лицензии, который был очень недорогим (99 долларов IIRC). Я использовал YourKit именно для этой задачи при устранении проблем с использованием кучи в Alfresco ECM. Есть и другие доступные инструменты (например, CodeGear JGears), которые, как я понимаю, также работают очень хорошо.

Вы можете рассмотреть возможность использования продукта в режиме оценки - если это обнаружит вашу проблему, он может заработать;)

2
ответ дан 13 December 2019 в 05:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: