我有一個存儲發票的數據庫。我必須使用所有發票中的信息通過一系列算法爲任何給定的月份進行復雜的操作。檢索和處理這些操作所需的數據需要大量的內存,因爲可能會有大量的發票。當用戶要求這些計算的間隔時間長達幾年時,問題變得越來越嚴重。結果是我得到了一個PermGen異常,因爲看起來垃圾收集器在每個月的計算之間都沒有完成它的工作。在大數據處理期間是否有任何方法來釋放內存?
我一直在使用System.GC來提示GC來完成它的工作並不是一個好的做法。所以我的問題是,除此之外,還有其他方法可以釋放記憶嗎?你能強制JVM使用HD交換來臨時存儲部分計算嗎?
此外,我試圖在每個月的計算結束時使用System.gc,結果是CPU使用率高(由於垃圾回收器被調用)和合理的較低的內存使用。這可以完成這項工作,但我認爲這不是一個合適的解決方案。
如果您向我們展示您的代碼片段,我們可以提供更好的指導。也許你的變量存在錯誤的範圍,因此存在太多時間。 – 2013-04-29 14:20:12
根據您對數據執行的操作類型,直接使用數據庫執行這些操作可能會更快,而不是將數據加載到java中,創建對象並分配內存......雖然這不能解答您的問題,但如果你的操作主要是*移動*數字,*做一些計算*,*讀*和*寫* *那麼你的數據庫可以更快地執行這些操作,因爲它「*更接近源*」 – GameDroids 2013-04-29 14:28:56