我正在使用 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;
最佳答案
我假设在将数据返回到 Flex 后,您的 EntityManager
保持打开状态,这意味着您的 MySQL 连接保持打开状态。这就是内存泄漏最有可能发生的地方。因此 - 关闭您的 EntityManager
。
在另一条评论中,您说您正在使用 GlassFish。这是一个全新的场景。你的类是 Servlet 吗? EJB? GlassFish 应该管理您的 EntityManager(如果类本身是托管的),因此您不必自己创建或关闭它。在这种情况下,请使用@PersistenceContext注释来注入(inject)EntityManager(而不是使用Persistence.create..)
但是无论如何设置,您都必须执行的操作是启动探查器并查看内存分配的位置。
关于Java Hibernate 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1938801/