0

我正在解析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).

我正在关注教程。
有谁能够帮助我。

4

4 回答 4

2

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

答:是的,当然!

问题不在于 SAX。SAX 实际上是处理大文件的理想选择。

问题显然发生在您的数组列表中。

它有多大?

其他结构有多大?

你真的需要存储你分配空间的所有数据吗?

您是否使用任何 VM 标志运行程序以分配更多内存?

你的电脑有多少内存?您可以在支持更多内存的 PC 上运行它吗?64位电脑?

您使用的是 64 位 JVM 吗?

建议:下载并试用 Visual VM 以在您的代码级别解决问题:

您可能会发现您分配的数据比您预期的要多得多。

恕我直言...

于 2012-05-15T05:17:09.110 回答
1

增加堆大小,例如,使用-Xmx1g.

请参阅此博客。

于 2012-05-15T05:14:48.103 回答
1

SAX 将成为解析大文件的最佳机制。DOM 解析会将整个文档加载到内存中,您会遇到问题。您可能会遇到问题,因为您试图将所有内容存储在某种集合中。SAX 非常适合解析 xml、处理它并继续前进。

于 2012-05-15T05:16:31.303 回答
1

创建您正在创建的数据结构时发生错误。您需要减少正在使用的内存量或增加程序的内存量。

现在不是 1 GB。如果你可以给它 4 到 16 GB 这将使处理文件更简单。

于 2012-05-15T06:06:47.050 回答