Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/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
Jpa Eclipse链接数据库字段和内存泄漏_Jpa_Memory Leaks_Eclipselink - Fatal编程技术网

Jpa Eclipse链接数据库字段和内存泄漏

Jpa Eclipse链接数据库字段和内存泄漏,jpa,memory-leaks,eclipselink,Jpa,Memory Leaks,Eclipselink,DatabaseField类存在内存泄漏问题。它消耗越来越多的内存,并且在gc操作期间从不释放任何内存。每次我们启动压力测试时,它都会在两周后保留20mb内存,这会使我的服务器崩溃 这个类和垃圾收集器之间的交互是什么。你必须使用一个工具来分析它们,就像内存堆一样,或者,无论如何,这是很难解决的 这里有一个示例,告诉您如何使用VisualVM捕捉它 祝你好运!(您需要它;-)看起来您在EclipseLink邮件列表中发布了更多信息,但仍然不足以说明问题所在。许多工具能够追踪物体上的物体,因此它不能

DatabaseField类存在内存泄漏问题。它消耗越来越多的内存,并且在gc操作期间从不释放任何内存。每次我们启动压力测试时,它都会在两周后保留20mb内存,这会使我的服务器崩溃


这个类和垃圾收集器之间的交互是什么。

你必须使用一个工具来分析它们,就像内存堆一样,或者,无论如何,这是很难解决的

这里有一个示例,告诉您如何使用VisualVM捕捉它


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

看起来您在EclipseLink邮件列表中发布了更多信息,但仍然不足以说明问题所在。许多工具能够追踪物体上的物体,因此它不能被GCd识别;如果您跟踪DatabaseField,我打赌您会在应用程序中发现导致泄漏的问题

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