Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate内存泄漏_Java_Apache Flex_Hibernate_Memory Leaks_Blazeds - Fatal编程技术网

Java Hibernate内存泄漏

Java Hibernate内存泄漏,java,apache-flex,hibernate,memory-leaks,blazeds,Java,Apache 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.cr

我正在用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;
factory=Persistence.createEntityManagerFactory(Persistence\u单元);
EntityManager em=factory.createEntityManager();
Query find=em.createNamedQuery(“Plan.findByStudentId”);
find.setParameter(“studentId”,studentId);
List c=find.getResultList();
返回c;

我假设在将数据返回到flex后,您的
EntityManager将保持打开状态,这反过来意味着您的MySQL连接将保持打开状态。这就是内存泄漏最有可能的原因。因此-关闭您的
实体管理器

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


但无论设置如何,您都必须启动探查器,查看内存分配到哪里。

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

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

你如何诊断它是内存泄漏?所谓内存泄漏是指当应用程序保留不再需要的对象时,如果每次垃圾收集后的可用内存少于上一次垃圾收集后的可用内存,就会看到内存泄漏。。。直到你得到一个OutOfMemoryError…哦,你在用glassfish。检查我的更新答案..尝试过但仍然无效。我把它们关上了;在每次返回前一行,但内存仍然不合理地增长。它是否成功关闭?请记住,内存可能会增长到某个点,直到垃圾被回收,因此,正如在您的问题的评论中所指出的,请等待,看看是否会发生OutOfMemory错误。您能给我一个完整的示例,说明情况应该如何?目前,我刚刚添加了em.clear();em.close();工厂关闭();在返回之前,它似乎或多或少有帮助。这是正确的吗?如果对你有效,那就好了。但是告诉我这节课是什么?它只是一个由BlazeDS加载的POJO吗?或者它是一个servlet/EJB?在前一种情况下,手动操作可能是合适的。在后者中,我将提供一些链接。现在我得到了java.lang.IllegalStateException:EntityManager已关闭,顺便说一下,我正在使用Glassfish v3。这有什么关系吗?