我需要解析工作中的csv文件。文件中的每一行都不是很長,只有幾百個字符。我使用下面的代碼將文件讀入內存。讀取文本文件時出現OutOfMemoryError
def lines = []
new File(fileName).eachLine { line -> lines.add(line) }
當行數爲10,000時,代碼工作得很好。但是,當我將行數增加到100,000時。我得到這個錯誤:
java.lang.OutOfMemoryError: Java heap space
對於10,000行,文件大小約爲7 MB,對於100,000行約爲70 MB。那麼,你會如何解決這個問題呢?我知道增加堆大小是一種解決方法。但是還有其他解決方案嗎?先謝謝你。
您可以處理每一行而不是將所有行保存在內存中,或者出於某種原因,您真的需要將它們放在內存中? – gurbieta
我不熟悉groovy,但每次從csv文件讀取一行時都會創建新對象,它是'new File(fileName).eachLine {line - > lines.add(line)}''創建新對象嗎?我個人用python做了同樣的事情,從來沒有得到任何錯誤。 – Prateek
您正在將每一行添加到內存中的列表中。列表中的'lines'變胖並導致OOM – Will