首页 > 解决方案 > hibernate SessionImpl get(Class) 中的性能下降5.2.5.version 中的 entityClass, Serializable id) 方法与 3.6.10 相比

问题描述

我们已将我们的应用程序从旧堆栈升级到新堆栈。

旧堆栈

新堆栈

我们已经看到新堆栈中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:两个堆栈中使用相同的代码。

谢谢。

标签: hibernatejava-8jboss7.xhibernate-mappingjboss6.x

解决方案


推荐阅读