簡體   English   中英

Java堆大小和內存不足

[英]Java Heap Size and OutofMemory

我正在嘗試在Java中讀取大約3m行的文件(制表符或csv文件); 還已將虛擬機內存添加到-Xmx6g。 對於制表符分隔的文件,該代碼可以處理40萬行,而對於csv文件,則可以使用。 為了釋放內存和垃圾值,我嘗試每隔幾百行就使用System.gc()來涉及許多LinkedHashMap和Vector。 但是,我的代碼在400K行后給出以下錯誤。

線程“主”中的異常java.lang.OutOfMemoryError:Java堆空間

at java.util.Vector.<init>(Vector.java:111)
at java.util.Vector.<init>(Vector.java:124)
at java.util.Vector.<init>(Vector.java:133)
at cleaning.Capture.main(Capture.java:110)

您嘗試加載整個文件從根本上來說是失敗的。 您可以優化所需的所有內容,但只是將上限稍微提高一點。 您需要的是消除限制本身。

您實際上一次需要全部內容全部存儲在內存中的機會微不足道。 您可能需要該數據中計算出一些數據,因此您應該開始研究一種逐塊進行計算的方法,每次都可以丟棄處理后的塊。

如果您的數據相互交織在一起,使您無法序列化計算,那么正如HovercraftFOE所提到的那樣,合理的解決方案是將數據傳輸到數據庫中並在其中進行工作,對所需的所有內容進行索引,對其進行規范化等。

暫無
暫無

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

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