Hibernate内存泄漏

时间:2016-08-21 17:30:44

标签: java hibernate

我反复调用这个代码片段,每次调用它时内存需求都会不断增长。

如何通过每次通话释放内存?



        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();
        }




2 个答案:

答案 0 :(得分:1)

如果您正在使用eclipse,那么'Eclipse Memory Analyzer'可以帮助提供Java堆使用的详细信息。希望Hibernate.getSessionFactory()能够遵循单例模式,因为hibernate sessionFactory的内部状态是不可变的。

让我知道它是否有帮助!!

答案 1 :(得分:0)

尝试使用Entitymanager。您可以使用entitymanager.unwrap()检索基础Hibernatesession。