問候,自組織樹內存使用
我有豐富的面孔應用程序(3.3.2.SR1)。該應用程序使用ModelPanel來查看實體。直到我想要顯示它們(呈現= false),所有模態面板纔會呈現。應用程序變得很大,並且從一個面板到另一個面板使用很多關係。所有工作都很好,但是如果組件rendred爲true或false,則它看起來像richfaces在內存中爲所有可能的情況創建UIComponent樹。當我試圖檢查應用程序的內存使用情況時(我使用YourKit Java Profiler來滿足這些需求),我發現它爲一個會話使用了大量內存。
我使用的Facelets連同RichFaces和我試圖用
<c:if test="rendred condition"... /> content </c:if>
它開始使用顯著更少的內存,但是...... 當我重新描繪用面板方面,主畫面上的控件停止上班。我懷疑這是因爲每次組件樹被改變時它重新創建整個樹,並且我有非同步的客戶端(html)和服務器(面)部分。
有人可以告訴我如何減少內存使用量嗎?由於HeapMemory中的StandardSession對象使用60-150Mb,所以我遇到了實際問題。幾乎所有這些內存都用於UIControls。問題的
例子:
我有參考了PANEL1,是Panel2,·Panel3中頁。
面板是:
<rich:modalPanel >
<a4j:outputPanel layout="block"
rendered="#{PanelBeanHolder.renderedViewScreen}">
<ui:insert name="panelContent" />
</a4j:outputPanel>
</rich:modalPanel>
我只是渲染面板執行此操作時。並且不想在輸出面板上加載UI控件直到我需要它。
預先感謝您。
P.S.我試着做下面的改善情況
配置的意見在會議數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模型使用大量內存。即使對象被序列化並且必須存儲在表單中。
試過重寫stateManager 在faces.config:
<state-manager>org.ajax4jsf.application.CompressAjaxStateManager</state-manager>
和重寫buildViewState和restoreView用於壓縮流。 這並沒有什麼幫助。
+1這是一個很好的解釋。尤其是JSF 2在局部狀態保存功能方面似乎是一個相當巨大的勝利。當編寫你自己的組件時,JSF 2也大大簡化了處理狀態的API(當然這對TS沒有幫助)。我還想補充一點,實現自己的StateManager實際上是一個高級主題,除非您對JSF API感到滿意,否則不應該輕鬆地完成。 – 2011-01-30 18:55:32