gpt4 book ai didi

java - JDO PersistenceManager 内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 07:14:11 25 4
gpt4 key购买 nike

使用 JDO JDOPersistenceManager,我不断从 Plumbr 获取内存泄漏检测报告,创建和销毁 JDOPersistenceManager 的正确方法是什么

管道报告:

对象创建于

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;
}
}

通常我在 try/finally block 中使用 pmf 实例并使用 pmf:

PersistenceManager pm = pmf.getPersistenceManager();

try {
//do stuff
}
finally {
pm.close();
}

处理 pmf singleton 的正确方法是什么,以免导致 plumbr 报告的内存泄漏?

最佳答案

从 org.datanucleus.api.jdo.JDOPersistenceManagerFactory 的源代码来看,您应该在请求结束时调用 instance.releasePersistenceManager(pm) ,以便正确销毁 PersistanceManager 并将其从 Factory 的缓存中删除。

感谢您使用我们的工具:) Plumbr开发人员

关于java - JDO PersistenceManager 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20223642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com