Сокращение объема памяти JSF: связь между состоянием представления и областью действия компонента - PullRequest
0 голосов
/ 29 июля 2011

Я работаю над JSF-приложением на основе RichFaces, в котором для параметров com.sun.faces.numberOfViewsInSession и com.sun.faces.numberOfLogicalViews установлено значение 1, но для большинства управляемых компонентов задана область действия «сеанс».Если сокращение объема занимаемой памяти является основной целью (без существенного ухудшения времени рендеринга страницы), что может быть лучшим вариантом?

  • Изменение области действия на «запрос», чтобы представлениесостояние не удерживается слишком долго (в отличие от того, когда область видимости установлена ​​на «сеанс»).

Я где-то читал, что область действия бобов может иметь отношение к размеру представления (иbean-компоненты "request" не обязательно могут быть доступны для GC в конце запроса).Я видел снижение производительности в этом случае, хотя и сразу.

  • Изменение области действия на «приложение», так как ряд страниц не зависит от пользователя и не изменяется в зависимости от аутентифицированного пользователя.Область применения приложения может привести к созданию единичного объекта, и, следовательно, будет ли значительно меньше общая память, связанная с компонентом, поскольку она не привязана к пользователю?

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

Последнее, но не менее важное, в представлении есть несколько форм.Может ли это также сыграть роль в увеличении объема памяти?

1 Ответ

0 голосов
/ 30 августа 2011

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

Для объектов, которые не являются общими для всех пользователей, использующих область «Запрос», следует немедленно предоставить им право на сборку мусора, а не зависать, пока не истечет сеанс пользователя.

Это не означает, что сборщик будет запущен немедленно, но когда сбор будет завершен, они будут удалены.

...