簡體   English   中英

是否可以使用SAX Parser解析大小為800 MB的大型xml文件

[英]Is It possible to parse large xml file which has size 800 MB using SAX Parser

我正在解析transxchange數據,其中包含一些非常大的文件(近800 MB) 當我嘗試解析這些文件時,出現以下錯誤。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
=======================================================================
    at java.util.ArrayList.<init>(Unknown Source)
    at java.util.ArrayList.<init>(Unknown Source)
    at JourneyPatternSections.<init>(JourneyPatternSections.java:21)
    at ReadBusData.startElement(ReadBusData.java:131)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at ReadBusData.parseDocument(ReadBusData.java:51)
    at ReadBusData.<init>(ReadBusData.java:41)
    at ReadBusData.main(ReadBusData.java:218).

我正在關注教程。
有誰能夠幫助我。

問:是否可以使用SAX Parser解析大小為800 MB的大型xml文件?

答:當然可以!

問題不在於SAX。 實際上,SAX是處理大型文件的理想選擇。

您的arraylist顯然出現了問題。

它有多大?

其他結構有多大?

您實際上是否需要存儲要為其分配空間的所有數據?

您是否正在使用任何VM標志運行程序以分配更多內存?

您的電腦有多少內存? 可以在支持更多內存的PC上運行它嗎? 一台64位PC?

您是否正在使用64位JVM?

建議:下載並嘗試使用Visual VM在代碼級別對問題進行故障排除:

您可能會發現分配的數據遠遠超出了預期。

恕我直言...

增加堆大小,例如,使用-Xmx1g啟動VM。

請參閱此博客。

SAX將成為解析大型文件的最佳方法。 DOM解析會將整個文檔加載到內存中,您會遇到問題。 您可能會遇到問題,因為您試圖將所有內容存儲在某種形式的集合中。 SAX非常適合解析xml,處理它並繼續前進。

該錯誤是發生在創造時,我們正在創建的數據結構。 您需要減少正在使用的內存量或增加程序所擁有的內存量。

這些天不是1 GB。 如果您可以給它4到16 GB的空間,這將使文件處理變得更加簡單。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM