जेबीओएस 7.1.1 पर हमारे जावाई 6 प्रोजेक्ट (ईजेबी 3, जेएसएफ 2) में, ऐसा लगता है कि हमारे पास @ViewScoped सेम के साथ मेमोरी रिसाव है। पिछले पेड़ के दिनों में मैंने इस मुद्दे की जांच पर समय बिताया है। इसलिए मैंने दो पेजों के साथ सरल प्रोजेक्ट बनाया है ताकि यह सुनिश्चित किया जा सके कि @ViewScoped बीन छोड़ने वाले पहले पृष्ठ को रिलीज़ किया जाएगा।लिंक्ड व्यूस्कोप्ड बीन्स मेमोरी लीक
<context-param> //web.xml
<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
<param-value>server</param-value>
</context-param>
<context-param>
<param-name>javax.faces.PARTIAL_STATE_SAVING</param-name>
<param-value>false</param-value>
</context-param>
TreeBean.java
@ManagedBean
@ViewScoped
public class TreeBean implements Serializable {
private TreeNode root;
public static AtomicInteger count = new AtomicInteger(0);
@Override
protected void finalize() throws Throwable {
System.out.println("TreeBean beans count: " + count.decrementAndGet() + " (FINALISATION)");
}
public TreeBean() {
super();
System.out.println("TreeBean beans count: " + count.incrementAndGet() + " (INITIALISATION)");
}
first.xhtml
....
<h:form id="frm">
<p:tree
value="#{treeBean.root}"
var="node"
id="tree">
....
<p:commandLink
action="second.xhtml?faces-redirect=true"
value="toSecond" />
....
second.xhtml
....
<h:form id="frm">
....
<p:commandLink
action="first.xhtml?faces-redirect=true"
value="toFirst" />
....
sysout:
INFO [stdout] (http--0.0.0.0-8080-4) TreeBean beans count: 1 (INITIALISATION)
INFO [stdout] (http--0.0.0.0-8080-4) TreeBean beans count: 2 (INITIALISATION)
INFO [stdout] (http--0.0.0.0-8080-4) TreeBean beans count: 3 (INITIALISATION)
......
INFO [stdout] (Finalizer) TreeBean beans count: 2 (FINALISATION)
INFO [stdout] (Finalizer) TreeBean beans count: 1 (FINALISATION)
INFO [stdout] (Finalizer) TreeBean beans count: 0 (FINALISATION)
और सभी सोचता है कि अच्छी तरह से आया था जब तक मैं अन्य @ViewScoped सेम
TreeBean.java
@ManagedBean
@ViewScoped
public class TreeBean implements Serializable {
private TreeNode root;
@ManagedProperty(value = "#{treeNodeBean}")
private TreeNodeBean treeNodeBean;
public static AtomicInteger count = new AtomicInteger(0);
@Override
protected void finalize() throws Throwable {
System.out.println("TreeBean beans count: " + count.decrementAndGet() + " (FINALISATION)");
}
public TreeBean() {
super();
System.out.println("TreeBean beans count: " + count.incrementAndGet() + " (INITIALISATION)");
}
TreeNodeBean.java
@ManagedBean
@ViewScoped
public class TreeNodeBean implements Serializable {
private String treeNodeItem="TreeNodeItem";
}
लिए और है कि कोई भी के बाद निर्भरता जोड़ दिया है बीन जारी किया गया है। क्या कोई जानता है कि इससे कैसे निपटें? क्या यह एक बग है या इसे कहीं कॉन्फ़िगर किया जा सकता है?
इस लिंक का संदर्भ लें। जेएसएफ 2.1 और 2.2 http://stackoverflow.com/questions/12182844/memory-leak-with-viewscoped-bean –