グリーティング、uicomponentツリーメモリの使用
私は豊富な顔のアプリケーション(3.3.2.SR1)を持っています。アプリケーションは、ModelPanelを使用してエンティティを表示します。すべてのモーダルパネルは、表示するまで表示されません(rendered = false)。アプリケーションは大きくなり、あるパネルから他のパネルに多くの関係を使用します。すべてうまくいきますが、richfacesのように見えるのは、コンポーネントのレンダリングがtrueまたはfalseの場合に、すべての可能なケースのメモリ内にUIComponentツリーを作成することです。私がアプリケーションのメモリ使用量をチェックしようとしたとき(私はこれらのニーズにYourKit Java Profilerを使用しました)、私はそれが1つのセッションに大量のメモリを使用しているのを見ています。
私はRichFacesのと一緒のFaceletsを使用していますが、私はそれが大幅に少ないメモリを使用することを開始するが、...私はパネルでの領域を再描画するとき 、親画面上のコントロールが停止している
<c:if test="rendred condition"... /> content </c:if>
を使用しようとしました働く私は、コンポーネントツリーが変更されてツリー全体を再作成するたびに、クライアント(html)とサーバー(顔)の部分が非同期になっていることが原因であると考えています。
誰かが私にメモリ使用量を減らす方法を提案できますか? HeapMemoryのStandardSessionオブジェクトは60-150Mbを使用するため、実際の問題があります。そして、このメモリのほとんどすべてがUIControlに使われていました。問題の
例:
私は、パネル3を、PANEL1 panel2への参照を持っているページがあります。
パネルは次のとおりです。
<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モデルにはまだ多くのメモリが使用されています。たとえオブジェクトが直列化され、フォームに格納されていなければならない。
<state-manager>org.ajax4jsf.application.CompressAjaxStateManager</state-manager>
とストリームを圧縮するためbuildViewStateとrestoreViewを書き換える:リライトのStateManager faces.configで しようとした
。 これはあまり役に立ちません。