目前正在使用 Primefaces 3.4.2,我们注意到如果您使用 ajax 在我们的应用程序中导航,而不重新加载页面,我们就会开始使用大量内存。目前使用一个名为CCDump的程序来分析 firefox 中的内存,并注意到我们在哪里持有很多僵尸 dom 对象。缩小范围以关注由以下primefaces创建的一个对象selectBooleanCheckbox
<p:selectBooleanCheckbox id="compareChkbx"
value="#{cc.attrs.xProd.selected}" styleClass="selectBooleanCheckbox"
rendered="#{dto.size > 1}" >
<p:ajax event="change" oncomplete="radioButtonSelected()"
listener="#{compareBean.onClickCompare(cc.attrs.xProd, cc.attrs.dto.partTerminology.partTerminologyId)}" update=":hform:lookupResults:pageInfo :hform:compareProducts:compareGroup @this" process="@this" />
</p:selectBooleanCheckbox>
当我运行 CC 分析时,我看到了这个实例的数百个元素。如果我在其中一个元素上“显示图表”,我会得到以下信息:
FragmentOrElement (xhtml) input id='lookupResults:CatResultList:0:aapPartType:list-by-cat:22:aapProd:aapProd:compareChkbx_input' http://localhost:8080/epcfe-web/main.xhtml
JS Object (HTMLInputElement)
FragmentOrElement (xhtml) div class='ui-helper-hidden-accessible' http://localhost:8080/epcfe-web/main.xhtml
FragmentOrElement (xhtml) div id='lookupResults:CatResultList:0:aapPartType:list-by-cat:22:aapProd:aapProd:compareChkbx' class='ui-chkbox ui-widget selectBooleanCheckbox' http://localhost:8080/epcfe-web/main.xhtml
nsChildContentList
nsEventListenerManager
我注意到的另一件事是,在浏览应用程序一段时间后,我最终javax.faces.resource/jquery/jquery.js.xhtml?ln=primefaces/eval/seq/xx
在 firebug 脚本选项卡中看到了数百个
我认为有一个未解除分配的侦听器连接到由创建的 div p:selectBooleanCheckbox
,我只是想知道在使用 ajax 重新加载页面的该部分后如何释放该对象。