1. 程式人生 > >在記憶體當中處理大資料計算的策略

在記憶體當中處理大資料計算的策略

我讀取了大批量的論文到記憶體當中,然後又按照同名作者進行了分類,然後再對每一塊論文根據相似度進行分塊。最後再200w+的資料集上跑總是出現java heap space的錯誤,堆記憶體溢位。還出現過gc錯誤

記憶體溢位錯誤截圖



java heap space 的錯誤原因:

在JVM中如果98%的時間是用於GC且可用的 Heap size 不足2%的時候將丟擲此異常資訊。

最後的解決辦法是把之前分類的結果儲存到本地檔案當中,其中每一塊的分類,使用json資料格式來儲存。(使用jackson框架進行轉換json)

針對每一塊進行排歧的時候,再單獨讀取每一塊。java讀寫本地檔案還是蠻快的,並沒有受太大的影響。

關於java記憶體洩露的介紹:https://www.ibm.com/developerworks/cn/java/l-JavaMemoryLeak/

此文提出,java對記憶體的回收,主要是通過有向圖的方式。如果有物件在main根部不可達,那麼就會在下次回收當中被回收掉。