Java 使用Apache commons csv处理2GB的csv文件时出现堆空间错误

Java 使用Apache commons csv处理2GB的csv文件时出现堆空间错误,java,csv,parsing,apache-commons,Java,Csv,Parsing,Apache Commons,我正在使用ApacheCommonsCSV库解析2GbCSV文件,但我遇到了堆内存问题 错误 嵌套异常为java.lang.OutOfMemoryError:java堆空间 Reader Reader=新的InputStreamReader(inputStream); List siebelRecords=new ArrayList(); CSVParser CSVParser=null; 试一试{ csvParser=新的csvParser(读卡器,CSVFormat.DEFAULT .wit

我正在使用ApacheCommonsCSV库解析2GbCSV文件,但我遇到了堆内存问题

错误 嵌套异常为java.lang.OutOfMemoryError:java堆空间

Reader Reader=新的InputStreamReader(inputStream);
List siebelRecords=new ArrayList();
CSVParser CSVParser=null;
试一试{
csvParser=新的csvParser(读卡器,CSVFormat.DEFAULT
.withEscape(“/”)
.withFirstRecordAsHeader()
.带分隔符(“|”)
.WithingnoreHeaderCase()
.withTrim());
List recordList=csvParser.getRecords();
siebelRecords=recordList.stream().sequential().map(csvRecord->new SiebelRecord(csvRecord.get(“客户ID”)、csvRecord.get(“客户名称”)、csvRecord.get(“客户组织”)、csvRecord.get(“客户PIN”)、csvRecord.get(“客户类型”)、csvRecord.get(“客户状态”)
,csvRecord.get(“客户身份”),csvRecord.get(“账单ID”),csvRecord.get(“账单名称”),csvRecord.get(“账单编号”),csvRecord.get(“账单状态”),csvRecord.get(“账单PIN”)
、csvRecord.get(“计费账户类型”)、csvRecord.get(“计费方法”)、csvRecord.get(“计费类型”)、csvRecord.get(“服务ID”)、csvRecord.get(“服务类型”),
csvRecord.get(“连接状态”)、csvRecord.get(“服务PIN”)、csvRecord.get(“主服务ID”)、csvRecord.get(“根资产ID”)、csvRecord.get(“产品名称”)
,csvRecord.get(“连接名称”),csvRecord.get(“辅助服务ID”)).collect(Collectors.toList());
}最后{
inputStream.close();
reader.close();
如果(csvParser!=null){
csvParser.close();
}
}

是否有我缺少的属性或是库问题。

我的答案与增加堆空间有点不相干。我会尝试逐行解析大型文件,而不是将它们全部加载到JVM中。这里有一个关于类似问题的链接,最后一个答案演示了一种使用缓冲读取器处理大型文件的方法。