ご挨拶、
リッチフェイスアプリケーション (3.3.2.SR1) があります。アプリケーションは ModelPanel を使用してエンティティを表示します。すべてのモーダル パネルは、表示するまでレンダリングされません (レンダリング = false)。アプリケーションが大きくなり、1 つのパネルから他のパネルへの関係を多く使用します。すべて正常に動作しますが、コンポーネント rendred が true または false の場合、可能性のあるすべてのケースに対して、richfaces がメモリ内に UIComponent ツリーを作成するように見えます。アプリケーションのメモリ使用量をチェックしようとしたとき (これらのニーズのために YourKit Java Profiler を使用しました)、1 つのセッションで大量のメモリを使用していることがわかります。
私はRichfacesと一緒にFaceletsを使用しており、使用しようとしました
<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 コントロールをロードしたくありません。
前もって感謝します。
PS状況を改善するために次のことを試みました
次を使用して、 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 モデルにはまだ多くのメモリが使用されます。オブジェクトがシリアル化され、フォームに保存する必要がある場合でも。
faces.config で stateManagerを書き直そうとし ました:
<state-manager>org.ajax4jsf.application.CompressAjaxStateManager</state-manager>
ストリームを圧縮するために buildViewState と restoreView を書き直します。あまり役に立ちません。