【问题标题】:Reducing JSF Memory Footprint: Relationship between View State and Bean Scope减少 JSF 内存占用:视图状态和 Bean 范围之间的关系
【发布时间】:2011-07-29 06:09:23
【问题描述】:

我正在开发一个基于 RichFaces 的 JSF 应用程序,该应用程序将 com.sun.faces.numberOfViewsInSession 和 com.sun.faces.numberOfLogicalViews 参数设置为 1,但将大部分托管 bean 设置为“会话”范围。如果减少内存占用是主要目标(页面渲染时间也不会显着恶化),那么更好的选择是什么?

  • 将范围更改为“请求”,以便视图状态不会保持太久(与范围设置为“会话”时不同)。

我在某处读到 bean 的范围可能会影响视图的大小(并且“请求”范围的 bean 在请求结束时不一定可用于 GC)。在这种情况下,我已经看到了性能下降,尽管如此。

  • 将范围更改为“应用程序”,因为许多页面与用户无关,并且不会根据经过身份验证的用户而真正改变。应用程序范围将导致单例,因此,与 bean 关联的整体内存是否会显着降低,因为它不与用户绑定?

另外,这会导致 JSF 视图停留太久吗?如果是,这将比当前会话范围 bean 的情况更糟。

最后但并非最不重要的一点是,一个视图中有多种形式。这是否也会在增加内存占用方面发挥作用?

【问题讨论】:

  • 当您显然需要极小的内存占用时,为什么还要使用基于状态组件的 MVC 框架(如 JSF)?
  • 好问题。我正在继承代码/架构,并且仅限于我可能进行的架构更改的性质。我希望能够充分利用现有架构并对其进行扩展。

标签: jsf memory richfaces scalability


【解决方案1】:

如果 bean 没有真正针对不同的用户进行更改,并且大部分时间都需要它们,请将它们设置为 Application 范围。这样,只会实例化对象的一个​​实例,并且所有请求都将使用它。

对于并非由所有使用请求范围的用户共享的对象,应使它们立即有资格进行垃圾收集,而不是在用户会话到期之前一直徘徊。

这并不意味着收集器会立即运行,但收集完成后它们将被删除。

【讨论】:

    猜你喜欢
    • 2014-12-26
    • 2013-12-12
    • 1970-01-01
    • 2011-10-26
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-01
    相关资源
    最近更新 更多