Java Hibernate内存泄漏

时间:2009-12-21 08:05:16

标签: java flex hibernate memory-leaks blazeds

我正在使用BlazeDS开发一个Flex应用程序,当我在hibernate中使用java从MySQL查询时,我遇到了内存泄漏。谁能告诉我如何处理这个内存泄漏?似乎每次查询都会调用java.exe占用更多内存。

由于

我的java样本

factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT);
EntityManager em = factory.createEntityManager();

Query find = em.createNamedQuery("Plan.findByStudentId");
find.setParameter("studentId", studentID);

List<Plan> c = find.getResultList();

return c;

2 个答案:

答案 0 :(得分:2)

我假设您在将数据返回到flex后将离开EntityManager,这反过来意味着您的MySQL连接保持打开状态。这就是内存泄漏最有可能来自的地方。所以 - 关闭你的EntityManager

在anoter评论中,您说您正在使用GlassFish。这是一个全新的场景。你的班级是Servlet吗?一个EJB? GlassFish应该管理你的EntityManagers(如果类本身是托管的),所以你不必自己创建或关闭它。在这种情况下,使用@PersistenceContext注释来注入EntityManager(而不是使用Persistence.create..

但是,无论设置如何,你必须做的事情是启动一个分析器,看看这个内存的分配位置。

答案 1 :(得分:0)

您好,您只需要在try catch块中输出代码并关闭实体管理器。

try{
    if(em !=null){
        em.close();
    }
} catch(Exception e){
    e.printStackTrace();
} finally {
    em.close();
}