我重复调用此代码片段,并且每次调用它时内存需求都会不断增长。
如何在每次调用时释放内存?
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();
}
最佳答案
如果您正在使用 Eclipse,使用“Eclipse Memory Analyzer”可以帮助提供 java 堆使用的详细信息。希望 Hibernate.getSessionFactory() 遵守单例模式,因为 hibernate sessionFactory 的内部状态是不可变的。
如果有帮助请告诉我!!
关于java - hibernate 内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39066958/