微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Hibernate/Spring 的类加载泄漏

如何解决Hibernate/Spring 的类加载泄漏

我们有 Spring/Hibernate-Tests 目前会产生类加载泄漏。由于技术原因,springcontext 是根据测试方法启动的。随着spring上下文的初始化,一个hibernate session也被初始化了。

我们可以观察到加载类的数量在稳步增加。使用 jprofiler 检查后,我们发现,休眠会话的任何实例化都会触发所有实体类对象的负载。由于我们有三位数的休眠实体,这会导致元空间和压缩的类空间出现大量膨胀。

问题是:为什么同一个类加载器一次又一次地加载同一个类,却没有意识到,类对象已经加载了?

编辑:场景说明

此问题是软件现代化项目的一部分,在该项目中,遗留应用程序的功能被移植到应用程序的 Spring 管理部分。在生产过程中,这工作正常 - 应用服务器初始化 spring 上下文(因此休眠),遗留核心通过一些静态访问器访问它。

在测试阶段,我们必须将遗留测试框架与 spring 核心集成。由于技术原因(旧的测试框架有点古怪),我们必须重新建立每个测试的 spring-context,而不是每个测试类。由于测试集中有相当多的测试,这最终导致压缩类空间内的 OOME。

当测试实际使用数据库连接时,每个测试都会初始化一个休眠会话。我们使用的是 Spring 5.2.13 和 Hibernate 5.4.29。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。