CreateEntityManagerFactory的大小正在增长。是在泄漏记忆吗?

时间:2010-09-09 22:50:54

标签: java memory-leaks garbage-collection

public class SoapMessageProcessor {

private EntityManager em;
private static final Logger logger = Logger.getLogger(SoapMessageProcessor.class);

public SoapMessageProcessor() {
    try {
        EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("Auditing");
        em = emFactory.createEntityManager();
    } catch (Exception ex) {
        throw new RuntimeException(ex.getMessage());
    }
}

当从异步EJB调用中调用此类时,这会泄漏内存吗?

所以我想到了制作EntityManager和EntityManagerFactory的静态类成员。这会解决问题吗?

这里需要一些帮助。当我运行JProfiler时。它说这个区域是热点。特别是createEntityManagerFactory。

我们非常感谢您解决这个问题。

1 个答案:

答案 0 :(得分:1)

我认为你不会关闭EMF或EM。

try {
        EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("Auditing");
        em = emFactory.createEntityManager();
        // do whatever you need to do
        em.close();
        emFactory.close();
} catch (Exception ex) {
        throw new RuntimeException(ex.getMessage());
}

您不应该将实体经理留在某个字段中。它是一种“使用一次然后扔掉”的物体。但是,您可以保留EMF参考。

您多久创建一次SoapMessageProcessor个实例?

您使用的是任何类型的依赖注入框架吗?它会让你的生活变得更加简单。