hibernate - hibernate SessionImpl get(Class) 中的性能下降5.2.5.version 中的 entityClass, Serializable id) 方法与 3.6.10 相比
问题描述
我们已将我们的应用程序从旧堆栈升级到新堆栈。
旧堆栈
爪哇 6
Jboss-eap-6.4
休眠核心:3.6.10.Final
新堆栈
爪哇 8
Jboss-eap-7.0
休眠核心:5.2.5.Final
我们已经看到新堆栈中org.hibernate.impl.SessionImpl.get(Class, Serializable) SessionImpl.java方法的性能下降。我们曾经为给定实体类的持久实例调用此方法。
代码
public <T extends SuperJDOIfc> T getEntityFromReferenceCache(Serializable primaryKey, Class<T> entityClass, SessionImpl sessImpl) {
SuperBasicReferenceJDOIfc jdoIfc = null;
org.hibernate.annotations.Cache cacheAnn = entityClass.getAnnotation(org.hibernate.annotations.Cache.class);
if (cacheAnn != null && EhcacheManager.REFERENCE.equals(cacheAnn.region())) {
if (sessImpl != null && !sessImpl.isClosed()) {
jdoIfc = (SuperBasicReferenceJDOIfc) sessImpl.get(entityClass, primaryKey);
}
调用代码:sessImpl.get(entityClass, primaryKey) [/details]
我们从 yourkit 中对两个堆栈进行了分析,我们发现了以下时间:
新堆栈:对于 3714 实体,大约需要20 秒。 旧堆栈:对于 3762 实体,大约需要2 秒。
如何解决这个性能问题。我们需要做任何配置还是一个错误?
PS:两个堆栈中使用相同的代码。
谢谢。
解决方案
推荐阅读
- python - 在数据框python中选择真值的操作
- android - 字体崩溃(空引用)
- javascript - setAttributeNS xmlns 的
- dynamics-nav - 如何在 SQL Server 中显示 Dynamics NAV 表选项字段文本值
- tensorflow - 如何使用 tensorflow 对象检测 API 进行人脸检测
- javascript - React 和 NodeJS:如何在客户端使用从服务器接收到的数据?
- javascript - es6将对象键值转换为单个对象的方法
- reactjs - 我想覆盖 Material-ui 中 MenuItem 组件的 div 样式?
- r - 无法从字符串中获取数字
- python - 从 HTTP 授权标头中删除“Bearer”的 Pythonic 方法是什么