2013-03-07 1 views
13

들이 기본적 각각 HttpRequestHttpSession의 속성으로 저장되기 때문에, 서블릿 컨테이너 자체에 의해 관리되는@RequestScoped@SessionScopedBean관리 빈의 라이프 사이클. JSF는 @ViewScopedBean의 라이프 사이클을 어떻게 관리합니까? 내가보기가 만들어 질 때 생성되고 다른보기로의 다시 게시가있을 때까지 사용할 수 있다는 것을 알고 있습니다. 그러나 우리가 그 관점에서 이동하자마자 가비지가 수집 된 것이 아니라는 것을 알게되었습니다.@ViewScoped Bean은 언제 어떻게 JSF에서 파기됩니까?

+0

일단 관리 빈 작업 메소드가 유효한 탐색 케이스 결과를 반환하면 동일한보기에 있더라도 뷰 범위의 관리 빈은 garbaged되고 다시 작성됩니다. 이 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.numberOfViewsInSessioncom.sun.faces.numberOfLogicalViews 컨텍스트 매개 변수로 구성 가능하며 각 매개 변수는 기본값 15),

  • 또는 nu 세션의 액티브보기 범위가 초과되었습니다 (Mojarra에서는 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를 참조하십시오. viewscoped beans를 더 빨리 파괴 할 수있는 솔루션이 있습니까? viewscoped 주석이 ominfaces에 도움이됩니까? 빙면의 –