Java 我应该使用什么样的数据结构来处理海量数据

Java 我应该使用什么样的数据结构来处理海量数据,java,xml,xhtml,jakarta-ee,Java,Xml,Xhtml,Jakarta Ee,我正在解析巨大的xhtml文件,并试图处理其中的内容。基本上是其中的单词,它们的位置等等。我试着使用HashMap,ArayList等等。在加载130347个数据后,它们都给出了OutOfMemory问题。在JAVA中,什么样的数据结构可以用来保存大量数据。你的问题很模糊。但如果内存不足,则可能应该使用磁盘上的数据库。PostgreSQL、MySQL、HSQLDB等等。无论您使用什么数据结构,您现在所做的将所有数据吸入一个巨大的结构中,然后对其进行处理都是行不通的。尝试一种增量方法,在这种方法中

我正在解析巨大的xhtml文件,并试图处理其中的内容。基本上是其中的单词,它们的位置等等。我试着使用HashMap,ArayList等等。在加载130347个数据后,它们都给出了OutOfMemory问题。在JAVA中,什么样的数据结构可以用来保存大量数据。

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

无论您使用什么数据结构,您现在所做的将所有数据吸入一个巨大的结构中,然后对其进行处理都是行不通的。尝试一种增量方法,在这种方法中,您读取一些数据,然后对其进行处理,然后再读取更多的数据,等等(实际上,您要做的是创建自己的专用数据结构,以分块处理数据,所以我的第一句话并不准确。)


一种方法是使用SAX解析文档,SAX使用事件驱动的方法。您可以让内容处理程序创建并存储通过读取xml元素构造的对象,在积累足够的xml元素后对其进行处理,然后清除集合。

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

如果您使用的是tomcat/eclipse,那么这个线程应该可以帮助您:

考虑使用SAX解析器,它的内存占用较少。

我不认为数据类型是问题所在,我认为您试图“一次做太多”。如果您处理的数据量足够大,实际上会导致内存问题,你可能想把这些步骤分开,分块进行。我遇到了5MB文件的问题。我的目标是支持高达10MB的文件。很好。如果您是从命令行运行应用程序,您可以传递类似-Xmx4G的内容以允许它使用4G内存。我在eclipse的tomcat服务器上运行。您的意思是说我从文档中收集的信息可以写入本地磁盘上具有适当数据结构的hsqldb,而不是加载到内存中,以便在as中查询我需要的内容必要的基础。因为我只需要它来处理那个请求,所以在处理结束时我必须删除我的插入,是吗?这很有趣。我没有将hsqldb解决方案应用于实时应用程序。您能告诉我,对于这种解决方案(如性能),我需要做哪些折衷,因为我需要插入大量数据进行多次调用?您建议使用哪个数据库,为请求临时加载数据,并在请求结束时清除数据。10MB XML文件决不是“海量数据”,所以一个磁盘数据库可能是杀伤力太大了,太好了。这将非常有帮助。谢谢