@RequestScoped
和@SessionScopedBean
托管bean 的生命周期由Servlet容器本身管理,因为它们基本上存储为HttpRequest
和{的属性分别为{1}}。 JSF如何管理HttpSession
的生命周期?我知道它是在创建视图时创建的,并且可以使用,直到有回发到另一个视图。但是我发现在我们离开那个视图后不会立即收集垃圾。
答案 0 :(得分:27)
时会被销毁
已执行非null
结果的回发,
或者,会话中的(逻辑)视图的数量已超出,并且特定视图是LRU链中的第一个(在Mojarra中,可由com.sun.faces.numberOfViewsInSession
和com.sun.faces.numberOfLogicalViews
上下文参数配置,每个都有默认值15),
或者,会话中的actieve视图范围已超过(在Mojarra中,这是25的硬编码限制),另请参阅JSF 2.2 Memory Consumption: Why does Mojarra keep the ViewScoped Beans of the last 25 Views in Memory?
或者,会话已过期。
因为单击另一个页面的GET链接或刷新页面或关闭浏览器选项卡/窗口而导致页面被卸载时,不将被销毁。豆子会活得很久,直到满足一个新的条件。无论如何要在卸载期间销毁它,请考虑改为使用OmniFaces @ViewScoped
。