簡體   English   中英

java.lang.OutOfMemoryError:Java堆空間

[英]java.lang.OutOfMemoryError: Java heap space

我的結果集太大。 如果它返回一個消耗內存的巨大數據集,則它在服務器中顯示OutOfMemory錯誤。 除了增加堆大小之外,我該如何處理這個問題?

嘗試一次不要放置太多數據,使用分頁器或類似方法。

首先檢查查詢的結果集是否正確/已優化。
而且在大多數數據庫中,您都可以使用以下方式限制返回的行數:

SELECT top(1000) * FROM mytable;

使用分頁器模式:不要一次獲取所有內容,而是定期僅獲取數據的一部分。 例如,您可以獲得5次20次結果,而不是獲得100次結果:0-19、20-39、40-59,依此類推...

如果您無法將整個結果集加載到內存中,請不要加載。 我可以根據情況考慮三種選擇:

  • 一次只讀取部分結果集; 例如在“頁面”中獲取它。
  • 閱讀時減少結果集; 例如,通過提取所需字段,制表或其他方式。
  • 重組查詢,以便可以在數據庫中完成數據縮減。

如果您提供了結果集包含的內容以及您對其進行的操作的更多詳細信息,我們也許可以提供具體建議。

如果您可以構造查詢,以便單個查詢可以返回所需的所有內容,那么通過結果集流式傳輸,您可以使數據庫一次將結果返回給您一行。 然后,大大減少了內存使用量,但代價是客戶端軟件和數據庫之間的數據流量增加了。 在我自己的公司中,當處理帶有返回的數百萬行的結果集時,我們發現這非常有效。 此功能取決於數據庫,有關MySQL,請參見

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM