2016-08-21 85 views
0

我重复调用这段代码片段,并且每次调用内存需求都会不断增加。休眠内存泄漏

如何在每次调用时释放内存?

 final Session session = Hibernate.getSessionFactory().openSession(); 
 
     try { 
 
      Transaction tx = session.getTransaction(); 
 
      tx.begin(); 
 
      final ProjectionList projList = Projections.projectionList(); 
 
      projList.add(Projections.count("totalLinePrice")); 
 
      projList.add(Projections.sum("totalLinePrice")); 
 
      final Object[] sum = (Object[]) session 
 
        .createCriteria(OrderR.class) 
 
        .setProjection(projList) 
 
        .add(Restrictions.eq("shopId", getShopR().getId())) 
 
        .add(Restrictions.gt("dtime", ord.monthBackTime)) 
 
        .uniqueResult(); 
 
      ord.num = (int) sum[0]; 
 
      ord.revenueTotal = (long) sum[1]; 
 
      tx.commit(); 
 
     } catch (HibernateException e) { 
 
      throw new Bug(e); 
 
     } finally { 
 
      session.flush(); 
 
      session.clear(); 
 
      session.close(); 
 
     }

回答

0

尝试使用EntityManager来代替。您可以使用entitymanager.unwrap()检索底层的Hibernatesession。

1

如果你在使用eclipse,使用'Eclipse Memory Analyzer'可以帮助提供java堆使用的细节。希望Hibernate.getSessionFactory()遵守单例模式,因为hibernate sessionFactory的内部状态是不可变的。

让我知道它是否有帮助!