問題 - XML 文字列を解析するときに、メモリ使用率がプログラムで増加し続けます。
TCP ポートで XML ストリームをライブで受信しています。
私は Netty を使用して xml データを引き出し、次に XStream を使用して XML 文字列を逆シリアル化/非整列化して Java オブジェクト ツリーに入れます。
netbeans プロファイルを使用してメモリ消費を監視すると、時間の経過とともにヒープが増加し、最終的に JVM が OutOfMemory 例外をスローすることがわかります。コール スタックを追跡し、実行中のテストのスクリーンショットを添付しました。
XML文字列をJavaオブジェクトに逆シリアル化/非整列化すると、メモリ消費が発生しているようです。
解析を行うために XStream 内でさまざまなパーサーを試しました - XPP3、KXML、STAX。XStream の代わりに JAXB を非整列化することも試みました。どのパーサーを使用しても、問題は解決しません。
これまでにこれらのさまざまなパーサーをすべて試しましたが、同じ問題があります。
xstream1 = new XStream(new KXml2Driver());
xstream2 = new XStream(new StaxDriver());
xstream3 = new XStream(new JDomDriver());
xstream4 = new XStream(new Xpp3Driver());
前述したように、XStream の代わりに JAXB を非整列化しようとしましたが、それでも同じ問題です。
添付の画像を見ると、この Arrays.copyOfRange 呼び出しが char[] のすぐ下に表示されています....どのパーサーであっても、この呼び出しは常にトレースの一番上に表示されます。
この問題を修正またはアプローチする方法について完全に迷っています
PLS 注 - ファイルから XML を読み取っていません。小さな XML チャンクを含むデータのライブ ストリームを取得します。各チャンクを抽出して Java オブジェクトに変換し、さらに処理します
ありがとう A