【发布时间】:2013-11-18 08:28:03
【问题描述】:
我想从 CSV 读取大量数据,其中包含大约 500,000 行。 我正在使用 OpenCSV 库。我的代码是这样的
CsvToBean<User> csvConvertor = new CsvToBean<User>();
List<User> list = null;
try {
list =csvConvertor.parse(strategy, new BufferedReader(new FileReader(filepath)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
最多 200,000 条记录,数据被读入用户 bean 对象列表。但是我得到的数据不止这些
java.lang.OutOfMemoryError: Java heap space
我在“eclipse.ini”文件中有这个内存设置
-Xms256m
-Xmx1024m
我正在考虑将大文件拆分为单独的文件并再次读取这些文件的解决方案,我认为这是一个冗长的解决方案。
有没有其他方法可以避免OutOfMemoryError异常。
【问题讨论】:
-
为什么你需要在内存中保存 200k 个对象,你不能读取更小的子集吗?你对对象列表做了什么?
-
看看 csvConverter.parse 做了什么,然后重新实现它。应该不多。让该方法重新调整迭代器,而不是在迭代时解析。
-
您尝试将文件的全部内容保存在内存中(在列表中)。如果你真的需要这个:购买更多内存。否则,每行或以较小的集合读取/处理条目行。