1

さまざまなパーサーをテストしようとしています。70 MB の xml ファイルを解析しようとすると、DOM に問題があります。エラーはjava.lang.OutOfMemoryErrorです。私はまともなコンピューターを持っていると思うので、問題があるかどうかはわかりません。

別の質問です。ストップウォッチを使用して解析時間をキャッチしていますが、stopwatch.stop を間違った場所に配置したと思います。私はそれがすぐ後にあると思います

Document document = builder.parse("file.xml"); 

すべてのノードを出力する for ループの後に配置しました

ありがとう

4

4 に答える 4

3

デフォルトのヒープ サイズを使用して大きな XML ドキュメントを解析している場合によくある問題です。JVM のヒープ サイズを増やす必要があります。プログラムを実行するとき、引数「-Xmx1024m」(または -Xmx512m または必要と思われるものは何でも、ヒープは指定されたポイントまでに必要なだけのメモリしか占有しません)を jvm コマンドに追加します。

例: java -Xmx1024m -jar myprogram.jar

これは、さまざまな IDE のランタイム プロパティでも設定できます。Eclipse では、アプリケーションの実行構成の「VM 引数」セクションです。

于 2013-05-01T20:18:32.717 に答える
3

また、大きな XML ドキュメントを処理する場合は、別の方法を試すこともできます。決定要因は、ドキュメント全体を同時にメモリに格納する必要があるかどうかです。スペースを節約するために、XML の一部を個別に解析できます。

これはストリーミング XML パーサーと呼ばれます。Java 用のいくつかの異なるストリーミング XML パーサーを Google で検索する必要があります。私が最初に思いつくのは、仕様であるStAXです。一般的なユーティリティはApache Axiomです。

http://en.wikipedia.org/wiki/StAX

于 2013-05-01T20:26:37.467 に答える
2

解決策は、受け取った の種類によって異なりjava.lang.OutOfMemoryErrorます。PermGen spacePermGen を設定するには、次のパラメータを JVM に追加する必要があります (この例では 300 MB に設定されます) 。

-XX:MaxPermSize=300m

このパラメーターをJava Heap Space追加してヒープ領域を設定する場合 (この場合は 1 GB):

-Xmx1024m
于 2013-05-01T20:08:20.533 に答える
0

別の提案: 非常に大きな XML ファイルを解析できる ScaleDOM を確認することをお勧めします: https://github.com/whummer/scaleDOM

ScaleDOM は、XML ノードの遅延読み込みにより、メモリ フットプリントが小さくなります。XML ドキュメントの一部のみがメモリに保持され、必要に応じてソース ファイルからノードが再ロードされます。

于 2014-08-26T21:02:46.867 に答える