2013-10-26 48 views

回答

0

事實上,如果你看過10GB的數據值得到任何程序一次性全部將導致比10GB內存更大的使用由於對象的開銷。從經驗來看,這個放大係數約爲2.4〜3倍(即消耗10GB = 24〜30GB內存)。

當使用大量的內存,處理小塊,並將其寫入到您的輸出處理。這樣,您不會一次加載全部10GB,從而節省內存。

如果你的數據庫10GB要求提交給它的查詢作出迴應。只有在提交查詢時才提取數據並使用緩存來優化數據庫。強加最大結果集大小限制以防止程序運行到OutOfMemoryError中。

+0

我明白了 - 謝謝。我曾希望相反會是真的..我需要整個數據庫來執行我的計算。所以對於一次只有塊來說輸出是無意義的。我是否需要改變我的計算,以便能夠逐步執行它們,還是有更好的方法? – Max

+0

@Max你有沒有辦法存儲部分計算?例如,對數據庫中的特定字段進行求和只需要一次加載一個入口(行),同時保留一個求和變量。當然,計算複雜度可能遠遠超出簡單求和的範圍,但我相信在任何給定時間總是會有一種方法允許只讀取數據庫的一個子集。 – initramfs

+0

也許你可以看看像redis這樣的內存緩存。 –