减少JSF内存占用:View State和Bean Scope之间的关系

时间:2011-07-29 06:09:23

标签: jsf memory richfaces scalability

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

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

我在某处读到bean的范围可能与视图的大小有关(并且“请求”范围的bean在请求结束时可能不一定可用于GC)。我已经看到了这种情况下的性能下降,但是直截了当。

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

另外,这会导致JSF View徘徊一段时间吗?如果是,这将使它比目前使用会话范围的bean更糟糕。

最后但并非最不重要,视图中有多个表单。这是否可以在增加内存占用方面发挥作用?

1 个答案:

答案 0 :(得分:0)

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

对于未使用“请求”范围的所有用户共享的对象,应立即使其符合垃圾回收条件,而不是在用户会话到期之前闲逛。

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