Java Machine崩溃导致MySQL结果太大。

时间:2014-05-04 06:15:18

标签: java mysql networking

当我试图读取一个巨大的列表时,我的内存不足。这是崩溃服务器的代码

query = "SELECT * FROM huge_list ORDER BY id ASC";
statement = this.database.createStatement();
results = statement.executeQuery(query);

这是错误

线程中的异常"线程-2" java.lang.OutOfMemoryError:Java堆空间

错误指向结果行。关于如何避免这种情况的任何建议?也许使用Limit加载列表?列表的大小会导致错误吗?

3 个答案:

答案 0 :(得分:1)

您可以更改jvm的内存设置,这可以解决您的问题,但通常您不应该一次加载所有数据。更好的加载总是让我们说100行,然后查询接下来的100行。

为了安全起见,我会再次存储最小的ID和查询,限制下一个行的早午餐。因此,如果添加新行,这不会破坏您的逻辑。

答案 1 :(得分:0)

我相信你应该流式传输MySQL结果。见Reading large amount of records MySQL into Java

您的另一个选择是增加JVM允许的最大RAM,但这可能不是您想要做的。

答案 2 :(得分:0)

尝试修改查询以仅返回您正在向用户显示/处理的记录。您可以使用limit by子句。还有一件事要说明你的列名,SELECT *并不是真正需要的,你真的在​​处理查询返回的所有列吗?