gpt4 book ai didi

java - hibernate5 typeconfiguration 注册表类中的内存泄漏

转载 作者:行者123 更新时间:2023-12-01 17:25:04 67 4
gpt4 key购买 nike

最近,我们将 hibernate 5 与我们的应用程序集成,并将其从 hibernate 3 升级。

几个月后,我们开始在 Hibernate 5 的类型配置注册表类中看到内存泄漏。

https://github.com/hibernate/hibernate-orm/blob/master/hibernate-core/src/main/java/org/hibernate/type/internal/TypeConfigurationRegistry.java

特别是在 registerTypeConfiguration 方法中创建新的并发 HashMap 时。

  1. 堆转储清楚地表明存在泄漏。
  2. 引导期间此文件的内容表明它包含所有 dao 类。
  3. 按照这个思路,应该有一组 DAO 类在启动时注册并在关闭时取消注册。
  4. 但是它正在泄漏内存,这在运行时是令人担忧的。 DAO 类是否存在重复副本?

我们使用spring的localSessionFactoryBean与hibernate事务管理器集成。

根据 localSessionFactoryBean 文档,它与 hibernate 5 兼容,这解决了为什么会出现泄漏的问题?

依赖关系:

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.23.RELEASE</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.3.9.Final</version>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-jdbc</artifactId>
<version>7.0.19</version>
</dependency>

配置:

<bean id="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource"
ref="dataSource"/>
<property name="hibernateProperties">
<props>
<prop key="hibernate.cache.region.factory_class">
<<>>
</prop>
<prop key="hibernate.dialect">
<<>>
</prop>
</props>
</property>
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

最佳答案

几个月前,我在工作中遇到了类似的问题(来自同一类的泄漏,但作为不同 hibernate 工作流程的一部分)。事实证明,每当 Hibernate 创建一个 TypeConfiguration 时,它都会在内部向 TypeConfigurationRegistry 注册自己,如 this file 所示。 。我看到取消注册发生的唯一地方是作为 session 工厂关闭回调的一部分,如 shown here .

我们使用 SchemaExport Hibernate API 以及 HBM XML 语法。鉴于没有“官方”方法来清除内置的 Hibernate 缓存,我们采用了一种解决方法来获取对 TypeConfigurationRegistry 内部状态的引用并将其清除。

我知道,这不是最好的方法,但只是想把它放在那里,以防有人遇到像我们这样的情况。

关于java - hibernate5 typeconfiguration 注册表类中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61222556/

67 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com