【问题标题】:JSF ViewScoped OutOfMemoryExceptionJSF ViewScoped OutOfMemoryException
【发布时间】:2016-04-07 12:20:15
【问题描述】:

我有一个带有 @ViewScoped bean 的 JSF 应用程序。是viewScoped,因为我做了一些ajax请求。

我将大量数据加载到视图中并将其显示给用户。

今天我进行了负载测试,遇到了OutOfMemoryException。事实证明,当我打开页面时,@PostConstruct 被调用

bean created. ID = @54a35e23

现在我导航到另一个页面并再次返回(@PreDestroy 未被调用)然后我得到

bean created. ID = @fee0948

我在负载测试中重新做了一遍。几个小时后,我收到了OutOfMemoryException

当我导航到另一个页面时,我能否以某种方式强制 JSF 销毁我的 ViewScoped bean?

【问题讨论】:

  • 您使用 CDI 还是愿意接受? OmniFaces @ViewScoped 在加载期间显式销毁 bean 和关联的 JSF 视图状态。但它需要CDI。另见showcase.omnifaces.org/cdi/ViewScoped
  • 我使用 java ee 6 并且没有 CDI。此外,我非常接近上线,所以我不想改变很多。没有别的办法吗?
  • JSF (Mojarra) 在会话中最多保留 25 个视图范围的 bean。更改内存空间。或者,引入二级 JPA 缓存(如果您使用的是 JPA)。
  • 我能以某种方式将 25 减少到 3 吗?
  • 并非没有破解 impl。没有公开设置。

标签: jsf jsf-2 primefaces


【解决方案1】:

如果您的 ViewScoped bean 很大,那么您的实现就有问题。你可以添加你的来源来审查它。如果您要处理大量数据,您可能需要在内存网格中使用一些东西,例如 Infinispan 或 Hazelcast

【讨论】:

  • 但是当我想在我的页面中使用一些 ajax 请求时,我必须使用 ViewScope 或 SessionScope,对吗?
  • 是的,但我说的是您在页面上显示的数据,您显示的是哪些组件?
猜你喜欢
  • 2020-08-20
  • 1970-01-01
  • 2014-02-14
  • 2012-09-29
  • 2012-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
相关资源
最近更新 更多