2011-01-30 1 views
2

グリーティング、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で しようとした

。 これはあまり役に立ちません。

答えて

関連する問題