问候,
我有丰富的面孔应用程序(3.3.2.SR1)。该应用程序使用 ModelPanel 来查看实体。在我想显示它们之前,所有模式面板都不会渲染(渲染 = 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 控件。
先感谢您。
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 以压缩流。它没有多大帮助。