我有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并得到了这个 -
为什么我有很多字符串????谁能解释为什么会出现OutOfMemory?
答案 0 :(得分:-2)
自有状态会议以来。物品不会被驱逐。除session.clear()
外,请致电session.flush()
。由于其状态会话,所有对象都将由于休眠的第一级缓存而在内存中。
否则使用无状态会话
https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/batch.html