java - 使用 JSON Simple 解析大型 JSON 文件(OutOfMemoryError)

标签 java json jvm out-of-memory json-simple

我正在尝试使用 JSON Simple 解析大型 JSON 文件,但出现内存不足错误。我使用的是 Windows 10,我的笔记本电脑有 8GB RAM。该文件有 250mb,我还需要解析一个 2gb 文件。我也尝试过使用 StringBuilder,但随后我在 StringBuilder 上遇到内存错误。这是我使用 StringBuilder 的代码:

    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("myfile.json")));
    String line = null;
    StringBuilder sb= new StringBuilder("");
    while( (line = br.readLine())!= null ){
        sb.append(line);
    }
    JSONParser parser = new JSONParser();
    Object obj=null;
    try {
        obj = parser.parse(sb.toString());  
    }catch (Exception e) {

    }     

这是没有 StringBuilder 的代码:

JSONParser parser = new JSONParser();
        Object obj=null;
        try {
            obj = parser.parse(new FileReader("myfile.json"));  
        }catch (Exception e) {

        }    

错误

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded at org.json.simple.parser.Yylex.yylex(Unknown Source) at org.json.simple.parser.JSONParser.nextToken(Unknown Source) at org.json.simple.parser.JSONParser.parse(Unknown Source) at org.json.simple.parser.JSONParser.parse(Unknown Source)

最佳答案

如果您愿意使用其他 Json 解析器,那么您可以尝试 Jackson's Streaming API,它可用于解析高达千兆字节大小的巨大 JSON。它可用于处理巨大文件,而无需将它们完全加载到内存中。它允许获取您想要的数据并忽略您不想要的数据

了解更多:https://github.com/FasterXML/jackson-docs/wiki/JacksonStreamingApi

关于java - 使用 JSON Simple 解析大型 JSON 文件(OutOfMemoryError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36821302/

相关文章:

java - 使用 Eclipse 读取 JSON 文件,我是否需要库

java - 使用 java 从动态 json 中查找键的值

java - JVM线程调度算法是什么?

java - 在自定义 CellRenderer 中覆盖 createToolTip()

java - Android线程在进程中间随机停止

json - 使用jsonnet覆盖嵌套列表元素

java - JVM 抛出 java.lang.OutOfMemoryError : heap space (File processing)

java - Bipush 在 JVM 中如何工作?

java - JCheckbox - ActionListener 和 ItemListener?

java - 读取rs232时随机换行