1

我正在使用 BlazeDS 开发 Flex 应用程序,并且在使用 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;
4

2 回答 2

2

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

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

但是无论设置如何,您都必须做的事情是启动一个分析器并查看该内存分配在哪里。

于 2009-12-21T08:31:44.943 回答
0

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

try{
    if(em !=null){
        em.close();
    }
} catch(Exception e){
    e.printStackTrace();
} finally {
    em.close();
}
于 2009-12-21T09:07:48.100 回答