为什么我的JDBCBrokerFactory会增长

时间:2014-09-03 08:50:29

标签: java jpa memory-leaks openjpa

我们正在使用OpenJPA 2.3.0(在具有相同问题的2.2.0之前)在某种程度上使用Spring连接到WAS环境(8.5)中的DB2数据库。 我们遇到的问题是应用程序在最终崩溃之前会继续吃掉越来越多的内存。

当使用(很多)推荐的内存分析器工具时,我们会得到JDBCBrokerFactory的罪魁祸首。 它有一个ConcurrentHashMap(有16个条目),给出使用数字负责丢失的内存。 (最大内存1024M,经过10个小时的连续但不太粗糙的负载,这个类负责400M而且只有MAT指出)

环境持有工厂类(org.springframework.orm.jpa.SharedEntityManagerCreator和com.volvo.jvs.runtime.springutils.SpringContextBootstrapper)对我来说并不奇怪,但我希望课程不会增长或至少在需要时缩小。 (在JPA 2.2.0中,还有更多的类保留了这个类,但仍然没有“我们的”类)

当然,这个类在我们与之交互的类中没有一个(OpenJPA实现的内部),这使得我们更难以看到使用JPA。

我们非常感谢任何有关我们可以改进以限制JDBCBrokerFactory破坏的想法或暗示。

/马丁

3 个答案:

答案 0 :(得分:0)

如果您的代码将内容存储在地图中,如果您不希望地图不断增长,则最终需要从地图中删除项目。

答案 1 :(得分:0)

在我看来,在您的应用程序中没有正确清理连接。这就是为什么这张地图无限增长的原因。我建议您手动正确清洁连接或使用JPA与弹簧的正确集成,因为弹簧将自行处理它。

答案 2 :(得分:0)

确保您的应用程序正确清理了它的EntityManagers。完成使用后,请务必关闭EntityManager。