内存泄漏,ChangeTracking JPA,Glassfish 3.1,Eclipselink 2.5

时间:2016-08-23 07:03:30

标签: java jpa memory-leaks eclipselink glassfish-3

使用Eclipselink 2.5.x在Glassfish 3.1.2上运行的java ee应用程序中很难找到大量内存泄漏

MAT Memory Analysis 我们在内存中拥有的用户实体的实例比在数据库中拥有的用户多得多。 持久性功能的变化跟踪对于每个用户来说都是8 MB。 最后,它花费超过2 GB,应该可能是2 MB。

有没有人知道这样的事情会发生什么?

我试图在一个小应用程序中重现它,但看不到类似的行为。

2 个答案:

答案 0 :(得分:0)

如果这些是应用程序静态缓存的一次性读取类型实例,则可能更改对这些实例的跟踪是一个坏主意,因为所有更改都会在其生命周期内进行跟踪,直到您释放它们为止。

有关如何在单个实体上使用延迟更改跟踪的信息,请参阅this

答案 1 :(得分:0)

将DAO服务的各个部分拆分成碎片之后,我找到了一种防止这种行为的方法。

我从JPA组件中释放了guave缓存,我在缓存中使用了Pojo而不是分离的实体。所以我100%确定没有任何东西引用缓存数据。