Java堆空间:内存不足-没有垃圾收集吗?

时间:2018-07-18 16:39:24

标签: java jvm out-of-memory

我对JVM和堆空间的了解有限,因此我试图了解我们所看到的某些行为。

在某些情况下,用户可以请求超出我们的堆空间的数据,从而导致OOM:Java堆空间。好的,这很有意义,我们知道为什么会这样。

OOM发生后,我注意到所报告的正在使用的内存量是堆大小+我们的应用程序正常运行的时间...但是,在OOM之后,它似乎没有被垃圾回收并恢复正常内存级别;它只是保持高。那是预期的吗?道歉这么简单的问题,我不确定在哪里可以找到此信息。

谢谢。

编辑:

这就是代码的根源-我们(错误地)允许用户获取太大的范围,并且当我们尝试返回对象的<List>时,会引起OOM错误(至少这是我的理论) )

这段代码中的哪些内容会导致对象无法清理?

public List<Class> getClassesByRange(Timestamp startDate, Timestamp endDate) {
    final Session session = this.sessionManager.openNewSession();

    try {
        final Criteria criteria = session.createCriteria(Class.class);

        criteria.addOrder(Order.desc("sorting"));
        criteria.setFetchMode("someObject", FetchMode.JOIN);
        criteria.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);

        criteria.add(Restrictions.ge("createDateTime", startDate));
        criteria.add(Restrictions.le("createDateTime", endDate));

        return criteria.list();
    } finally {
        session.close();
    }
}

0 个答案:

没有答案