2008-12-10 1 views
1

Я работаю над приложением, которое имеет дерево навигации, которое является сессионным компонентом. Каждый раз, когда я вызываю страницу, содержащую этот компонент, мое использование памяти будет увеличиваться. Однако, после нескольких часов бездействия, память все еще не освобождена. Есть ли идеи, почему это происходит, или обходные пути?Ошибка использования памяти JSF при использовании сессионных компонентов

ответ

2

Вы можете явно установить тайм-аут сеанса в дескрипторе развертывания или сделать это программно (хотя вы, вероятно, не хотите делать это в приложении JSF).

В конечном счете, это управление контейнером - серверу удается освободить ресурсы независимо от логических параметров истечения срока действия.

Вы можете помочь диагностировать происходящее с помощью слушателей. Например, вы можете реализовать свой класс компонента HttpSessionBindingListener. Он будет уведомлен, когда он будет добавлен или удален из сеанса. Кроме того, вы можете наблюдать за всеми событиями сеанса, используя HttpSessionAttributeListener (JSF может использовать сеанс для управления состоянием просмотра, поэтому ожидайте некоторые записи, которые вы сами не определили). Сеанса HTTP определяется в web.xml:

<listener> 
    <display-name>MyListener</display-name> 
    <listener-class> 
     somepackage.MySessionDiagnosticListenerImpl 
    </listener-class> 
</listener> 

Если вы просто оставить сервер неактивен, это может быть просто, что он использует другие запросы сеанса для запуска сеанса с истекшим сроком очистки и вы наблюдаете деталь реализации. Или может быть утечка памяти, потому что вы установили ссылку на объект в некотором неуправляемом классе.

2

Вам действительно нужно использовать профилировщик, чтобы узнать, что происходит с памятью в приложении java. Профайлер Eclipse довольно хорош.

Если его сеансовый компонент не должен быть создан для каждого попадания на страницу внутри той же сессии.

Вы также должны иметь в виду, что GC не будет собирать классы сразу. И GC не обязательно зависит от времени.

Смежные вопросы