【发布时间】:2015-02-05 09:17:47
【问题描述】:
我在 MySQL db 的 Table User 中有 7500 行,VM 选项:-Xmx8m 和下面的一些代码:
Query query = session.createQuery("select u from User u");
ScrollableResults resultSet = query.setFetchSize(Integer.MIN_VALUE).setReadOnly(true).scroll(ScrollMode.FORWARD_ONLY);
int i = 0;
while (resultSet.next()) {
User o = (User) resultSet.get(0);
System.out.println(o.getId());
i++;
if (i % 50 == 0) {
session.clear();
}
}
resultSet.close();
但不幸的是,我的控制台中有这个输出: ... 5745 线程“主”java.lang.OutOfMemoryError 中的异常:超出 GC 开销限制。
但我不明白为什么? Integer.MIN_VALUE - 用作驱动程序逐行流式传输结果集的信号。也许我有一个问题,因为 ScrollableResults 存储在内存中并且 8m 的堆还不够??
【问题讨论】: