2013-03-14 92 views
0

我的结果集太大。如果它返回消耗内存的庞大数据集,那么它在服务器中显示OutOfMemory错误。除了增加堆大小外,我该如何处理这个问题?java.lang.OutOfMemoryError:Java堆空间

+1

描述一个结果是不正常完全在内存在一次。你可能正在保存你在某处阅读的内容,这就是问题所在。 – 2013-03-14 09:52:13

+0

使用选项-Xmx1024m来增加堆空间 – 2013-03-14 09:52:38

+1

@OmarMEBARKI“除了增加堆大小” – 2013-03-14 09:52:54

回答

0

尽量不要每次都放这么多的数据,使用paginator或类似的东西。

+1

当您正确地请求数据库时,结果集并未完全加载,您可能会很好地遍历一个内存很小的庞大数据库。 – 2013-03-14 09:55:27

0

检查结果集的查询是否正确/优化。
而在大多数数据库可以限制的行数的东西反正回到像

SELECT top(1000) * FROM mytable; 
0

使用分页程序模式:而不是一次得到的一切,定期得到的只是数据的partf。例如,取代获得100个结果,您可以得到20个结果5次:0-19,然后20-39,然后40-59等...

0

如果无法将整个结果集加载到内存中....那么不要!我可以根据具体情况考虑三种备选方案:

  • 只能一次读取结果集的一部分;例如把它放在“页面”中。
  • 在读取结果集时减少结果集;例如通过提取你需要的字段,制表或其他。
  • 重新构造您的查询,以便可以在数据库中完成数据缩减。

如果您提供了有关结果集包含的更多详细信息以及您正在处理的内容,我们可能会提供具体的建议。

0

如果您可以构建您的查询,以便单个查询可以返回您需要的所有内容,那么使用结果集流,您可以使数据库一次将结果返回给您一行。您的内存使用量将大幅减少,代价是客户端软件和数据库之间的数据流量增加。在我自己的公司,我们发现在使用返回数百万行的结果集时这非常有效。此功能是依赖于数据库,为MySQL则在

http://dev.mysql.com/doc/refman/5.0/en/connector-j-reference-implementation-notes.html

相关问题