Eclipse Link DatabaseField和Memory泄漏

时间:2014-10-02 11:45:57

标签: jpa memory-leaks eclipselink

我在DatabaseField类上有内存泄漏问题。它消耗越来越多的内存,并且在gc操作期间永远不会释放任何内存。每次我们启动压力测试时,它会在2周内保持20mb内存,导致我的服务器崩溃。

此类与垃圾收集器之间的交互是什么。

2 个答案:

答案 0 :(得分:1)

您必须使用工具来分析内存堆,例如VisualVMMAT,但无论如何,这很难解决。

这里有一个answer about itthis post告诉您如何使用VisualVM捕获它。

祝你好运! (你需要它;-))

答案 1 :(得分:1)

看起来您已将此信息发布到EclipseLink邮件列表中,并提供了更多信息,但仍然不足以说明问题所在。许多工具都能够追踪固定在物体上的东西,因此它不能成为GCd;如果你追踪数据库领域,我会在你的应用程序中发现导致泄漏的问题。

根据我的经验,使用JPA时内存泄漏的最常见原因是从不同的EntityManagers读取的应用程序缓存实体。由于这些实体具有对读取它们的上下文的引用,因此它们阻止了EntityManager成为GC,这也使得其内部对象和缓存不会成为GC' d。解决方案是不在应用程序中缓存实体 - 它们已经缓存在JPA中,因此您复制了内存使用情况,而没有获得通过在应用程序缓存中更新的应用程序进行更改的好处。只需存储实体的ID,并在需要时使用查找调用来检索它。如果必须使用缓存,则可以使用只读查询来检索实体以进行缓存,如下所述: http://docs.oracle.com/cd/E27559_01/doc.1112/e28552/toplink.htm