2014-05-04 34 views
0

当我试图阅读一个巨大的列表时,内存不足。这是一个崩溃的服务器Java机器因为太大的MySQL结果而崩溃。

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

这是在线程“线程2” java.lang.OutOfMemoryError错误

异常的代码:Java堆空间

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

+1

是的,要么添加LIMIT约束,要么为-XMm(或类似的东西)提供Java VM更多内存标志 – kirilloid

+1

@kirilloid -Xmx,如果内存提供 – awksp

+0

服务器上没有更多的内存 – user2253741

回答

1

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

只是为了安全起见,我会存储最小的ID并再次查询,并限制下一行的行数。所以如果添加新行,这不会破坏你的逻辑。

0

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