使用JDO JDOPersistenceManager,我不斷收到來自Plumbr內存泄漏檢測報告,什麼是創建和銷燬JDOPersistenceManagerJDOPersistenceManager內存泄露
正確的方式Plumbr報告:
在
創建的對象org.datanucleus.api.jdo.JDOPersistenceManagerFactory.newPM(org.datanucleus.api.jdo.JDOPersistenceManagerFactory, java.lang.String, java.lang.String):838
和正在舉行
in key of java.util.HashMap$Entry
in table of java.util.HashMap
in map of java.util.HashSet
in pmCache of org.datanucleus.api.jdo.JDOPersistenceManagerFactory
in pmf of com.example.MyServlet
最後一行,pmf是啓動對象並在請求生命週期中使用的單例。 MyServlet是一個httpservlet,一個doPost被調用。
PMF.java:
public class PMF {
private static PersistenceManagerFactory instance;
public static PersistenceManagerFactory get() {
if (instance == null) {
Properties props = new Properties();
props.setProperty("javax.jdo.PersistenceManagerFactoryClass",
"org.datanucleus.api.jdo.JDOPersistenceManagerFactory");
props.put("datanucleus.PersistenceUnitName", "pmf");
instance = JDOHelper.getPersistenceManagerFactory(props);
}
return instance;
}
}
通常我使用PMF例如在try/finally塊,並使用PMF:
PersistenceManager pm = pmf.getPersistenceManager();
try {
//do stuff
}
finally {
pm.close();
}
是什麼處置PMF singlton的所以正確的方法因爲不會導致由plumbr報告的內存泄漏?
你存儲在你的servlet領域的任何對象?您的servlet只創建一次,並且是單身人士。 – NamshubWriter