Hibernate ScrollableResultSet意外的OutOfMemoryError

时间:2015-02-07 22:08:53

标签: java hibernate postgresql scrollableresults

我有Postgres DB,在Client表中有7500行,-Xmx8m。

 Query query = session.createQuery("select c from Client c");
ScrollableResults resultSet = query.setFetchSize(50).setCacheMode(CacheMode.IGNORE)
.scroll(ScrollMode.FORWARD_ONLY);
    int i = 0;

    while (resultSet.next()) {
        Client client = (Client) resultSet.get(0);
        System.out.println(client.getId());
        i++;
        if (i % 50 == 0) {
            session.clear();
            Thread.sleep(500);
        }
    }
    session.clear();
    resultSet.close();

当我运行我的应用程序时,我得到了这个: .... 4188 java.lang.OutOfMemoryError:超出GC开销限制

然后我设置-Xmx1024m并运行jvisualvm并得到了这个 -

enter image description here 为什么我有很多字符串????谁能解释为什么会出现OutOfMemory?

1 个答案:

答案 0 :(得分:-2)

自有状态会议以来。物品不会被驱逐。除session.clear()外,请致电session.flush()。由于其状态会话,所有对象都将由于休眠的第一级缓存而在内存中。

否则使用无状态会话

https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html