我正在尝试用Java高效地加载大型CSV格式文件(通常为200-600MB),需要使用更少的内存和尽可能快的访问速度。目前,程序正在利用一个String数组列表。以前,Lua程序使用一个表格处理每个CSV行,并使用一个表格来保存每个“行”表格。
以下是内存差异和加载时间的示例:
- CSV文件 - 232 MB - Lua - 549 MB内存 - 加载157秒 - Java - 1,378 MB内存 - 加载12秒
如果我记得正确,Lua表中的重复项存在于实际值的引用中。我怀疑在Java示例中,List正在保存每个重复值的副本,这可能与较大的内存使用有关。
以下是CSV文件中数据的一些背景信息:
- 每个字段都由字符串组成。 - 每行中的特定字段可能包括一组字符串中的一个(例如,字段3可以是“红色”,“绿色”或“蓝色”)。 - 内容中有许多重复的字符串。
以下是加载的数据可能需要完成的一些示例:
- 搜索所有字符串以尝试与给定字符串匹配并返回匹配的字符串。 - 在GUI表中显示匹配项(可通过字段排序)。 - 更改或替换字符串。
我的问题是 - 是否有一个集合可以需要更少的内存来保存数据,但仍然提供易于快速搜索/排序数据的功能?
以下是内存差异和加载时间的示例:
- CSV文件 - 232 MB - Lua - 549 MB内存 - 加载157秒 - Java - 1,378 MB内存 - 加载12秒
如果我记得正确,Lua表中的重复项存在于实际值的引用中。我怀疑在Java示例中,List正在保存每个重复值的副本,这可能与较大的内存使用有关。
以下是CSV文件中数据的一些背景信息:
- 每个字段都由字符串组成。 - 每行中的特定字段可能包括一组字符串中的一个(例如,字段3可以是“红色”,“绿色”或“蓝色”)。 - 内容中有许多重复的字符串。
以下是加载的数据可能需要完成的一些示例:
- 搜索所有字符串以尝试与给定字符串匹配并返回匹配的字符串。 - 在GUI表中显示匹配项(可通过字段排序)。 - 更改或替换字符串。
我的问题是 - 是否有一个集合可以需要更少的内存来保存数据,但仍然提供易于快速搜索/排序数据的功能?
intern()
相比表现如何? - assylias