Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何处理5GB左右的大型XM文件Java_Java_Xml_Bigdata - Fatal编程技术网

如何处理5GB左右的大型XM文件Java

如何处理5GB左右的大型XM文件Java,java,xml,bigdata,Java,Xml,Bigdata,我的应用程序需要使用最大为5GB的XML文件中的数据。我在从XML分类的图像中加载数据。Image类有许多属性,比如Path、Name、MD5、Hash和许多其他类似的信息 5 GB的文件中有大约5000万个图像数据,当我解析xml时,数据加载到应用程序中,在应用程序中创建相同数量的图像类,我对其执行不同的操作和计算 我的问题是,当我解析这样一个hugh文件时,我的内存会被耗尽。我猜所有的数据都在ram中加载。由于代码的复杂性,我无法提供完整的代码。我认为有一种有效的方法来处理如此多的类。我整晚

我的应用程序需要使用最大为5GB的XML文件中的数据。我在从XML分类的图像中加载数据。Image类有许多属性,比如Path、Name、MD5、Hash和许多其他类似的信息

5 GB的文件中有大约5000万个图像数据,当我解析xml时,数据加载到应用程序中,在应用程序中创建相同数量的图像类,我对其执行不同的操作和计算

我的问题是,当我解析这样一个hugh文件时,我的内存会被耗尽。我猜所有的数据都在ram中加载。由于代码的复杂性,我无法提供完整的代码。我认为有一种有效的方法来处理如此多的类。我整晚都在做研究,但没有成功,有人能给我指出正确的方向吗


谢谢

您需要某种管道来将数据传递到其实际目的地,而不必一次将其全部存储在内存中

我不知道您的代码是如何进行解析的,但您不需要将所有数据存储在内存中


对于读取大型XML文件,这里有一个非常好的答案

如果您使用的是SAX,但占用了大量内存,那么您做错了什么,我们无法在不查看代码的情况下告诉您做错了什么


我建议使用JVisualVM获取堆转储并查看哪些对象正在占用内存,然后调查应用程序中创建这些对象的部分。

我假设您知道不要使用DOM解析器,而是使用流式解析器,如SAX或StAX,对吗?但你没有提到这一点——为什么?你到底是如何解析数据的?我使用SAX解析器,但由于数据量如此之大,应用程序内存会消耗5000万个图像对象,如果我增加内存,应用程序工作正常。应用程序数据也可以从sqlite加载,我从那里也遇到了同样的问题,问题是大量的数据,我猜大量的对象都在RAM中。是的,在解析xml后,数据保存在sqlite中,如果我将来想使用数据,我可以从sqlite加载数据,这比解析xml快得多,但问题是当数据量超过时,图像类有重要的参数,如图像路径、名称,因此我必须将所有数据加载回应用程序中,从而再次创建相同数量的对象,