2013-03-14 90 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

相關問題