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

Q:SAXパーサーを使用してサイズ800 MBの大きなxmlファイルを解析することは可能ですか?

A:はい、もちろんです!

問題はSAXではありません。SAXは、実際には大きなファイルを処理するための理想的な選択肢です。

この問題は、アレイリストで明らかに発生しました。

それはどれくらい大きいですか?

他の構造物の大きさはどれくらいですか?

スペースを割り当てるすべてのデータを実際に保存する必要がありますか?

より多くのメモリを割り当てるためにVMフラグを使用してプログラムを実行していますか?

PCにはどのくらいのメモリがありますか?より多くのメモリをサポートするPCで実行できますか?64ビットPC?

64ビットJVMを使用していますか?

提案:Visual VMをダウンロードして試して、コードレベルで問題のトラブルシューティングを行ってください。

おそらく、意図したよりもはるかに多くのデータを割り当てていることに気付くでしょう。

私見では...

于 2012-05-15T05:17:09.110 に答える
1

ヒープサイズを増やします。たとえば、でVMを起動します-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 に答える