Java持久性(JPA)堆问题

Java持久性(JPA)堆问题,java,jpa,memory-leaks,glassfish,Java,Jpa,Memory Leaks,Glassfish,我有一个使用JPA在Glassfish上运行的简单EAR应用程序。它从我的Oracle DB表中读取记录并进行处理。一旦处理完毕,它们在数据库中被标记为“是”,然后我在实体管理器上调用clear(),这样处理过的对象就可以分离和GC’ed。然而,尽管我们添加了clear()堆用法,但总体堆仍在增加,并最终达到最大堆。没有其他物体可以导致泄漏,我不知道我还能做什么。我们还关闭了JPA缓存 <property name="eclipselink.cache.shared.default" va

我有一个使用JPA在Glassfish上运行的简单EAR应用程序。它从我的Oracle DB表中读取记录并进行处理。一旦处理完毕,它们在数据库中被标记为“是”,然后我在实体管理器上调用clear(),这样处理过的对象就可以分离和GC’ed。然而,尽管我们添加了clear()堆用法,但总体堆仍在增加,并最终达到最大堆。没有其他物体可以导致泄漏,我不知道我还能做什么。我们还关闭了JPA缓存

<property name="eclipselink.cache.shared.default" value="false"/>
如有任何建议,我们将不胜感激。我知道我可以分析应用程序,但很难看出问题所在,即使我看到了,我也希望是一些JPA对象没有被收集,我不确定我在清理不再需要的实体方面遗漏了什么


James

使用内存分析器(如JProfiler)是最好的解决方案

否则,请尝试缩小内存泄漏发生的范围。尝试删除处理过程的每个部分,直到找到罪犯

您是随着时间的推移耗尽内存,还是正在处理一个最终耗尽内存的大型事务

确保没有任何东西抓住正在处理的对象。可能包括一些代码。你做过复杂的查询吗

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)