在我的程序中,我正在从磁盘中读取一系列文本文件。对于每个文本文件,我处理一些数据并将结果作为JSON存储在磁盘上。在此设计中,每个文件都有自己的JSON文件。除此之外,我还将一些数据存储在单独的JSON文件中,该文件存储来自多个文件的相关数据。我的问题是,每个解析的文件共享JSON越来越大,最终会占用太多内存。我在32位机器上,有4 GB的RAM,不能再增加Java VM的内存大小。
要考虑的另一个限制是我经常回顾旧的JSON。例如,假设我从FileY中提取出ObjX。在伪代码中,发生以下情况(使用Jackson进行JSON序列化/反序列化):
// In the main method.
FileYJSON = parse(FileY);
ObjX = FileYJSON.get(some_key);
sharedJSON.add(ObjX);
// In sharedJSON object
List objList;
function add(obj)
if (!objList.contains(obj))
objList.add(obj);
我唯一能想到的就是使用流式JSON,但问题是我经常需要访问之前的JSON,所以我不知道该流是否可行。我的数据类型不仅仅是字符串,这使我无法使用Jackson的流媒体功能(我相信)。有谁知道一个好的解决方案?
答案 0 :(得分:2)
如果您的数据结构太大而内存不足,则必须开始使用其他内容。我建议您使用数据库,这将显着加快数据检索和存储速度。它还会使您的数据结构限制为硬盘驱动器的大小,而不是RAM的大小。
尝试使用this page来介绍Java和数据库。
答案 1 :(得分:1)
我无法相信你真的只需要4GB RAM用于文本文件和JSON。
我看到了三种可能的解决方案。
如果你有可能,我更愿意选择3。