Java中超大JSON的Jackson管理

Java中超大JSON的Jackson管理,java,json,performance,jackson,Java,Json,Performance,Jackson,所以我有一个非常大的JSON文件(600MB),我的Java项目中有几个模块,它们导入JSON文件中的每个项目,并将其属性写入一个大型数据库中的几个表中。它适用于相对较小的JSON文件,直到现在我还必须处理这些文件,但这一个文件使JVM抛出OfMemoryException。 我使用的库是Jackson,我通过以下函数将JSON文件中的每个项加载到Java列表中: 产品的公共列表(字符串JSONString) 抛出JsonParseException、JsonMappingException、I

所以我有一个非常大的JSON文件(600MB),我的Java项目中有几个模块,它们导入JSON文件中的每个项目,并将其属性写入一个大型数据库中的几个表中。它适用于相对较小的JSON文件,直到现在我还必须处理这些文件,但这一个文件使JVM抛出OfMemoryException。 我使用的库是Jackson,我通过以下函数将JSON文件中的每个项加载到Java列表中:

产品的公共列表(字符串JSONString)
抛出JsonParseException、JsonMappingException、IOException{
字节[]拉丁1=JSONString.getBytes(“ISO-8859-1”);
String fromUtf8Bytes=新字符串(拉丁文1);
ObjectMapper mapper=新的ObjectMapper();
Products[]productsArray=mapper.readValue(从UTF8bytes,
产品[]类别);
List productsList=Arrays.asList(productsArray);
退货产品清单;
}

然后,返回的列表被传递给我的导入函数,但在此之前,会发生内存不足异常。
有没有关于如何处理如此大的文件而不将原始JSON分解为几个较小的文件的想法?

使用Jackson的流式API,您可以解析文件而不必将其完全存储在内存中。解析每个产品并将其放入数据库(或者同时放入几个产品,可能会增加数据库开销),但不要尝试一次加载所有产品。

有几种可能的解决方案,归结为增量处理或缓存(这取决于您想对
产品列表执行什么操作),但这种情况下最简单的解决方案是:购买更多RAM并增加最大JVM堆大小。对于这种额外的内存开销,所需的额外RAM可能比开发人员的时间要便宜。

我忘了提到,我已经试过了。在该特定类的运行配置中,我添加了-Xms1536m-Xmx2536m,但是,当我运行程序时,我得到“在VM初始化期间发生错误,无法为对象堆保留足够的空间”,我运行在一台64位windows 7机器上,容量为8GBsRAM@user2385870:您正在使用什么虚拟机?
java-version
输出什么?它说我使用的是64位版本,但出于某种原因,我的IDE使用的是32位JRE。。。我现在设法将堆大小增加到5GBs,感谢您帮助我找到正确的方向@user2385870:是的,我承认这个问题是被加载的,因为它听起来和正在使用的32位JVM一模一样,不客气:)。