如何在内存中拥有数千个对象

时间:2018-01-18 06:56:16

标签: java jvm heap-memory

我有一个数据库查询,它返回约200000条记录。 我有以下代码:

List<Object> list = query.list();

当代码点击此行时,在调试模式(F12)的浏览器中,我看到java.lang.OutOfMemoryError: GC overhead limit exceeded.

我需要知道如何才能解决这个问题。

1 个答案:

答案 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实际上可能是(不同)内存泄漏的症状。从长远来看,上述创可贴解决方案都不适用于此......