繁体   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