Java 为什么我的JDBCBrokerFactory在增长

Java 为什么我的JDBCBrokerFactory在增长,java,jpa,memory-leaks,openjpa,Java,Jpa,Memory Leaks,Openjpa,我们正在使用OpenJPA2.3.0(之前的2.2.0也有同样的问题),在某种程度上通过Spring连接到WAS环境(8.5)中的DB2数据库。 我们面临的问题是,应用程序不断消耗越来越多的内存,直到最终崩溃 当使用(由许多人推荐的)内存分析器工具时,我们遇到了一个罪魁祸首JDBCBrokerFactory。 它有一个ConcurrentHashMap(有16个条目),给定使用编号,它负责丢失内存。 (最大内存1024M,连续10小时但不太粗糙的负载后,本课程负责400M,仅由MAT指出) 工厂

我们正在使用OpenJPA2.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)持有对我来说并不奇怪,但我希望该类在需要时不会增长或至少收缩得更好。(在JPA2.2.0中,有更多的类保留了这个类,仍然没有“我们的”类)

当然,这个类并不是我们与之交互的类(OpenJPA实现的内部),这使得很难看出我们在使用JPA时是否出错

我们将非常感谢任何关于我们可以改进以限制JDBCBrokerFactory破坏的想法或提示


/Martin

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

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

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

我们只使用注入式EntityManager,因此我无法将其视为泄漏源。我们不手动管理任何连接,对于自定义查询,我们使用JPA,因此我们没有任何可以关闭的功能。希望我们的JPA xml配置是正常的,我们在这里也不会做很多花哨的事情。