2011-01-30 6 views
2

인사말,uicomponent 트리 메모리 사용량

풍부한 얼굴 응용 프로그램 (3.3.2.SR1)이 있습니다. 응용 프로그램은 ModelPanel을 사용하여 엔터티를 봅니다. 모든 모달 패널은 보여주기 전까지 렌더링되지 않습니다 (rendered = false). 응모는 크고, 한 패널에서 다른 패널까지 많은 관계를 이용합니다. 모두 잘 작동하지만 부자연 성은 구성 요소 rendred가 true 또는 false이면 가능한 모든 경우에 메모리에 UIComponent 트리를 만듭니다. 이러한 요구 사항에 대해 YourKit Java Profiler를 사용하여 응용 프로그램의 메모리 사용량을 확인하려고 시도했을 때 한 세션에 많은 메모리가 사용된다는 것을 알았습니다. 내가 패널 영역을 다시 쓰게 할 때

... 내가 richfaces와 함께 Facelets를 사용하고 내가

<c:if test="rendred condition"... /> content </c:if> 

그것은 훨씬 적은 메모리를 사용하기 시작 사용하려고하지만, 부모 화면에서 컨트롤이 중지 일하다. 나는 그것이 구성 요소 트리가 변경되어서 전체 트리를 다시 만들 때마다, 그리고 클라이언트 (html)와 서버 (얼굴) 부분이 동기화되지 않았기 때문에 그런 것 같아요.

누군가 내게 메모리 사용을 줄이는 방법을 제안 할 수 있습니까? HeapMemory의 StandardSession 객체가 60-150Mb를 사용하므로 실제 문제가 있습니다. 거의 모든이 메모리가 UIControls에 사용되었습니다. 문제의

예 :

나는, 패널 3을,에 Panel1 panel2에 대한 참조를 가지고 페이지가 있습니다.

패널은 : 만 패널을 렌더링하고

<rich:modalPanel > 
    <a4j:outputPanel layout="block" 
      rendered="#{PanelBeanHolder.renderedViewScreen}"> 
     <ui:insert name="panelContent" /> 
    </a4j:outputPanel> 
</rich:modalPanel> 

이에 대한 조치가 수행 될 때. 그리고 필요할 때까지 출력 패널에 UI 컨트롤을로드하고 싶지 않습니다.

미리 감사드립니다.

P. 나는이 함께 web.xml의 내부 상황을 세션에서보기

구성 수를 개선하기 위해 다음을 수행하려고 :

<context-param> 
    <param-name>com.sun.faces.numberOfViewsInSession</param-name> 
    <param-value>4</param-value> 
</context-param> 

<context-param> 
    <param-name>com.sun.faces.numberOfLogicalViews</param-name> 
    <param-value>4</param-value> 
</context-param> 

그것은 StateHolder 개체를 향상시킬 수있다, 그러나 많은 도움이되지 않습니다 . 나는이 숫자가 커지면 측정을하고 메모리 사용량이 증가합니다. 그러나, 나는 그들을 1,1로 설정하는 것에 지쳤을 때 - 일부 페이지가 작동을 멈췄다. 때로는 요청이 시작 페이지로 전달됩니다. 2,2 상황을 개선했지만 환영 페이지로 전달하는 문제는 여전히 발생합니다.

으로 시도하면 javax.faces.STATE_SAVING_METHOD에서 클라이언트 모드가 사용됩니다. UIComponent 모델에는 여전히 많은 메모리가 사용됩니다. 객체가 직렬화되어 양식에 저장되어야하는 경우에도 마찬가지입니다.

<state-manager>org.ajax4jsf.application.CompressAjaxStateManager</state-manager> 

및 스트림을 압축 및 buildViewState restoreView를 다시 :

는 faces.config에 재기록에서 StateManager 했습니다. 많은 도움이되지 않습니다.

답변