我正在使用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;
答案 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();
}