加载JSON文件:java.lang.OutOfMemoryError:Java堆空间

问题描述

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

我的代码是:

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

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

            while (iterator.hasNext()) {
               ...
            }

我发现的所有内容都不允许我按需装载物品,有人知道这是否可能吗?

解决方法

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

如果您需要简短的教程来查看如何使用它,可以遵循this linkthis link

,

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

Memory mapped filed in java

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...