3

在我的程序中,我正在从磁盘读取一系列文本文件。对于每个文本文件,我都会处理一些数据并将结果以 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,所以我不知道流式是否可以工作。我的数据类型不仅限于字符串,这使我无法使用杰克逊的流媒体功能(我相信)。有谁知道一个好的解决方案?

4

3 回答 3

2

如果您的数据结构太大以至于内存不足,您将不得不开始使用其他东西。我建议您使用数据库,这将显着加快数据检索和存储速度。它还将限制数据结构的大小,而不是 RAM 的大小。

试试这个页面,了解 Java 和数据库的介绍。

于 2012-07-10T21:44:57.863 回答
1

我不敢相信你真的只需要将近 4GB 的 RAM 来存储文本文件和 JSON。

我看到了三种可能的解决方案。

  1. 如果可能,切换到纯文本。那不是那么渴望记忆。
  2. 只需根据需要打开和关闭文件。您可以按照特定的命名约定对文件进行排序,例如哈希的前两个/三个/...数字,并在需要时打开它们。
  3. 如果你有这么多数据,你可能会切换到数据库。这样可以节省很多资源。

如果可能的话,我更喜欢选项 3。

于 2012-07-10T21:48:09.643 回答
0

你可以制作api并从中获取responce.body

于 2021-09-16T11:28:58.217 回答