2013-03-07 6 views
13

Жизненный цикл из @RequestScoped и @SessionScopedBeanуправляемых компонентов управляются самой Servlet контейнер, так как они в основном хранятся в качестве атрибута HttpRequest и HttpSession соответственно. Как JSF управляет жизненным циклом @ViewScopedBean? Я знаю, что он создается, когда представление создается и может использоваться до тех пор, пока не появится обратная передача для другого представления. Но я узнал, что это не мусор, собранный сразу же после того, как мы перейдем от этой точки зрения.Как и когда объект @ViewScoped уничтожен в JSF?

+0

После того, как метод управляемого управляемого компонента возвращает действительный результат действия в навигации, даже если он находится на одном и том же представлении, управляемый bean-объект с видимым видом будет мусором и воссоздан. Прочтите это http://balusc.blogspot.co.il/2011/09/communication-in-jsf-20.html, и здесь они хранятся: http://stackoverflow.com/a/9177769/617373 – Daniel

+0

Ну, на самом деле, вы не должны быть в состоянии предсказать gc или это произойдет немедленно, не так ли? Но о просмотренных фасоли в mojarra см. Http://stackoverflow.com/a/13097208/1530938 – kolossus

+0

сбор мусора является асинхронным. когда область обзора «уничтожена», она действительно «отмечена как готовая к сбору мусора», как и все другие объекты Java. Примечание: маркировка действительно является ссылочным числом 0 (т. Е. Помечена как «больше не используется»). – DwB

ответ

23

Он будет разрушен, когда

  • обратная передача с не- null исходом был выполнен,

  • или число (логических) видов в сессии превысил и конкретный вид является первым в цепи LRU (в Mojarra, который настраивается параметрами com.sun.faces.numberOfViewsInSession и com.sun.faces.numberOfLogicalViews, каждый из которых имеет значение по умолчанию 15),

  • или, nu (в Моджаре, это жесткий диск 25), см. также JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory?

  • или, сессия истек.

Он, таким образом, не быть уничтожены, когда страница выгружается в результате нажатия на ссылку GET на другую страницу или обновить страницу или закрыть браузер вкладку/окно. Боб будет жить так долго, пока не будет удовлетворено одно из условий, описанных выше. Чтобы уничтожить его во время разгрузки в любом случае, вместо этого используйте вместо этого OmniFaces @ViewScoped.

+0

Что вы подразумеваете под LRU? а также что вы подразумеваете под * логическими * видами? – Geek

+2

1) Да. Они хранятся на карте LRU, упорядоченной по последнему использованию. В последнее время используется первая запись. 2) См. Http://stackoverflow.com/questions/12562469/how-can-i-set-the-view-timeout/12564632#12564632 – BalusC

+0

@BalusC, есть ли какие-либо решения для ускорения просмотра фасоли? будет ли справляться с обходами с помощью миндаля? –