我有一个数据库查询,它返回约200000条记录。 我有以下代码:
List<Object> list = query.list();
当代码点击此行时,在调试模式(F12)的浏览器中,我看到java.lang.OutOfMemoryError: GC overhead limit exceeded.
我需要知道如何才能解决这个问题。
答案 0 :(得分:1)
以下是一些可能的&#34;创可贴&#34;解决方案。真正的解决方案是对内存使用过多的原因进行适当的调查,并为其开发一个考虑的修复程序。
Bandaid解决方案#1:增加堆大小。继续增加堆大小,直到OOME停止。
Bandaid解决方案#2:如果您在致电query.setMaxResults(count)
之前致电list()
,您应该获得列表中的大多数count
元素。如果count
足够小,你就不会得到OOME。
Bandaid解决方案#3:不要将值检索到列表中。相反,做这样的事情:
Iterator<Object> iter = query.iterate();
while (iter.hasNext()) {
Object row = iter.next();
}
请注意,OOME实际上可能是(不同)内存泄漏的症状。从长远来看,上述创可贴解决方案都不适用于此......