首页 > 解决方案 > JSF绑定会不会导致内存泄漏,导致HTTP Session中出现上千个UI组件

问题描述

我们发现系统经常内存不足,运行Full GC并没有帮助回收内存。然后我们进行堆转储分析内容。

JSF 实现名称/版本 Mojarra 2.1.28-jbossorg-2 服务器名称/版本:JBoss EAP 6.3

我们发现一些 HTTP 会话拥有超过 2GB 的内存。MAT 中 dominator_tree 的屏幕转储附在以下链接中

https://drive.google.com/file/d/1zX1xHzpXBacrDuSNrS2Dp1kVUDm00uku/view?usp=sharing

它显示有许多org.primefaces.component.tabview.TabView组件(大约 360 个),每个都指代 5M 到 9M 的内存,并指代系统中的一组特定 UI!

我在 primefaces 论坛上提出了一个问题,建议该问题可能与 JSF 绑定有关。

我检查了页面的来源,它包含:

    <f:actionListener binding="#{CourseInfoManagedBean.initBatchUpload()}"/>

其中 CourseInfoManagedBean 是一个@ViewScopedbean。

这会导致内存泄漏吗?

此外,为什么那些org.primefaces.component.tabview.TabViewUI 组件是直接在 下org.apache.catalina.session.StandardSession而不是在 下创建的com.sun.faces.util.LRUMap

标签: jsfmemory-leaksbinding

解决方案


推荐阅读