加载 JSON 文件:java.lang.OutOfMemoryError: Java heap space

Posted

技术标签:

【中文标题】加载 JSON 文件:java.lang.OutOfMemoryError: Java heap space【英文标题】:Load JSON file: java.lang.OutOfMemoryError: Java heap space 【发布时间】:2020-11-30 20:17:47 【问题描述】:

我有一个问题,我试图读取一个可能非常大的 JSON 文件,它给了我一个内存错误,因为我找到的所有内容都直接加载到一个数组中,而不是能够逐个对象访问。

我的代码是:

Object obj = parser.parse(new FileReader("file.json"));

            JSONArray jsonObject = (JSONArray) obj;
            Iterator<JSONObject> iterator = jsonObject.iterator();

            while (iterator.hasNext()) 
               ...
            

我发现的所有东西都不允许我根据需要加载项目,有人知道这是否可能吗?

【问题讨论】:

【参考方案1】:

我不知道您使用哪个库进行 JSON 解析。根据我的经验,我建议您使用Jackson library 来完成此任务。它具有流支持来管理文件并避免将所有数据加载到内存中,然后将它们转换为 JSON。 Jackson 允许您将 JSON 数据格式转换为 POJO。

如果你需要一个简短的教程来查看如何使用它,你可以关注this link和this link。

【讨论】:

我最初检查了它,但问题是我需要一个 POJO 并且我的 JSON 的内容是可变的 @JuanCarlosSerranoPérez Jackson 能够在不使用 POJO 的情况下处理可变 JSON【参考方案2】:

据我所知,这最适合 mmap 文件(内存映射文件),您可以在其中访问比可用内存大得多的内存中的文件。它给你一种在内存中加载完整文件的错误感觉。

Memory mapped filed in java

我很确定应该已经在 mmap 文件上构建了一些框架抽象来处理 json 文件。我只是给你一个建议,而不是解决方案。

【讨论】:

以上是关于加载 JSON 文件:java.lang.OutOfMemoryError: Java heap space的主要内容,如果未能解决你的问题,请参考以下文章

vue中json文件过大加载缓慢

在括号内加载包含 JSON 的 JSON 文件

尝试使用文件加载器和 webpack 加载大型 json 文件

使用 Webpack 文件加载器导入静态 json 文件给出文件路径而不是 json 内容

如何使用 React 延迟加载导入 Json 文件?

Django加载本地json文件