2010-05-05 113 views
3

我正在解析大型的xhtml文件,并试图在其中播放内容。基本上它的话,他们的立场等我尝试使用HashMap,ArayList等所有他们在加载130347数据后给OutOfMemory问题。什么是可用于在JAVA中保存大量数据的数据结构。我应该使用什么样的数据结构来处理大数据

+3

我不认为这是数据类型的问题,我认为你试图做的“一次太多”。如果您处理的数据量足够大,导致内存问题,那么您可能需要拆分步骤并以大块方式进行。 – 2010-05-05 18:30:30

+0

你的xhtml文件有多大? – 2010-05-05 18:56:41

+0

我遇到了一个5MB文件的问题。我打算支持高达10MB的文件。 – Rachel 2010-05-06 16:19:13

回答

0

你的问题很模糊。但是,如果内存不足,则应该使用磁盘上的数据库。 PostgreSQL,MySQL,HSQLDB等等。

+0

您的意思是说我从文档中收集的信息可以写入到本地磁盘上具有适当数据结构的hsqldb中,而不是加载到内存中,以便可以根据需要查询我需要的信息。因为我只需要它的请求,在处理结束时我必须删除我的插入是吗?这非常有趣。我没有为实时应用程序应用hsqldb解决方案。您能否告诉我我需要为这种类似性能的解决方案所做的折衷,因为我将不得不插入大量的数据,从而造成大量的调用? – Rachel 2010-05-06 16:28:30

+0

您建议使用哪个数据库来暂时加载数据,并在请求结束时清除它们。 – Rachel 2010-05-06 16:42:29

+0

一个10MB的XML文件绝不是“庞大的数据”,因此磁盘数据库可能是矫枉过正的。 – intgr 2010-05-15 17:01:45

1

现在你在做什么,将所有数据吸收到一个巨大的结构中然后处理它,不管你使用什么数据结构都不会工作。在阅读一些数据,然后处理它,然后再阅读一些数据等方面尝试一种增量方法(实际上,你将以这种方式创建自己的专用数据结构来处理区块处理,所以我的第一个句子不是真的准确。)

这样做的一种方法可能是使用SAX解析文档,SAX使用事件驱动的方法。您可以让您的内容处理程序通过读取xml元素来创建和存储您构建的对象,一旦积累足够的内容就可以处理它们,然后清除该集合。

+0

谢谢我将尝试使用SAX – Rachel 2010-05-06 16:31:39

+0

本网站上还有另外一个回答,描述如何使用SAX和一些xml对象模型库(可能是JDOM),如果我能找到它,我会添加链接到这个答案。 – 2010-05-06 16:52:01

+0

太好了。这将是非常有益的。谢谢 – Rachel 2010-05-06 19:33:05

1

查看虚拟机的内存设置。您可以通过命令行修改虚拟机内存大小(如果这是您的位置),或者如果您处于某种服务器端环境,则可以通过配置文件修改虚拟机内存大小。

如果您使用的是Tomcat /月食,这个线程可以帮助你: Eclipse memory settings when getting "Java Heap Space" and "Out of Memory"

+0

好点。如果您从命令行运行应用程序,则可以传递类似-Xmx4G的内容以允许其使用4千兆字节的内存。 – intgr 2010-05-05 18:35:39

+0

我在eclipse上的tomcat服务器上运行。 – Rachel 2010-05-05 18:40:48

2

考虑使用SAX解析器,它是不太占用大量内存。

+0

谢谢,我会尝试SAX。 – Rachel 2010-05-06 16:21:13

相关问题