2014-10-14 2 views
0

Моего WebApplication является встречающимся в memoryleak. (Я следил за веб-приложение с VisualVM)Возможно ли это, что @viewScope от JSF вызывает утечку памяти?

Каждый раз, когда я иду на конкретной странице JSF, который боб с аннотацией ViewScope, увеличением кучи. С viewScope все объекты (и память) должны быть очищены, когда я покидаю страницу. Даже если я закрываю сессию, куча остается на том же уровне, а затем снова возрастать, если я иду на этой странице JSF ...

Так, очевидно, что приложение будет разрушаться ... ли сессия не закрывается хорошо (он должен «убивать» все объекты)? или возможно, что ссылки на объекты все еще сохраняются и что сборщик мусора не выполняет эту работу?

+0

У вас есть какие-либо данные на этой странице? –

+0

Да с 3 000 строк, отображаемых группой из 50, благодаря меню навигации. – ZheFrench

+0

- это datatable paginated? –

ответ

0

View lifetime management - это специфическая реализация JSF. MyFaces и Mojarra реализуют очередь - когда она заполняется, то при следующем создании нового представления будет удален старый. В последнее время он использовал один, если я не ошибаюсь. См. BalusC's answer для получения дополнительной информации.

Вы не можете надежно обнаружить, что пользователь покинул страницу. Вы можете прослушивать события beforenload в окне с помощью js, но это не сработает отлично. Я знаю, что ICEfaces 1.8.2 делает это.

Когда сеанс разрушается, все его виды также уничтожаются.

Есть некоторые проблемы с вашими ожиданиями.

  • Что вы подразумеваете под "закрытием сессии"? Даже если вы закрыли все окна браузера, вам все равно придется ждать, пока сеанс не закончится. И даже тогда это не очевидно, веб-контейнеры обычно не обещают немедленно удалить истекшие сеансы. Вы можете контролировать разрушение сеанса с помощью журнала сервера - для этого вам может потребоваться настроить параметры журнала вашего конкретного сервера или создать HttpSessionListener.
  • Сбор мусора не обещает, что он немедленно удалит все недостижимые объекты. Задействуйте полный GC через VisualVM несколько раз - этого обычно будет достаточно. Но не на 100%.
Смежные вопросы