2010-05-05 111 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

相關問題