2009-11-16 34 views

答えて

6

注意すべきことは、JAXBContext.newInstance()が非常に遅い操作であることです。これは、多くのリフレクションとクラス生成が行われ、duffymoで言及されたパーマスペースの問題につながります。ありがたいことに、JAXBContextはスレッドセーフなので、cache one away and reuse itには問題ありません。さもなければ、JAXBのメモリ使用量は完全なDOMよりも上回っているかもしれないし、SAXより大きいと言えるのは間違いないと思います。

非常に大きいドキュメントの場合は、process them in chunks with JAXBにすることができます。 JAXB RI distributionには、JAXBによるストリーミングの例が含まれています。

0

Xerces SAXParserのようなJavaのより単純なXML処理メカニズムとは対照的に、JAXBではパフォーマンスがかなり悪くなることがあります。

2

JAXBは、DOMベースの解析と同じ基本的な問題を抱えています。これは、一般に、データデータ構造全体が同時にメモリに保持されるということです。つまり、一般的にはDOM API(XOMを除いて可能性があります)よりもメモリが不足しています。

これは、JAXBを使用して、必要に応じてストリーム指向の方法で大きなドキュメントのフラグメントを読み取る方法があることを示しています。しかし、それはかなりエキゾチックな使い方です。

+0

あなたはパーサのようなSAXとJAXBを使用して説明することができます(若干のパフォーマンスへの影響を持つ)この問題を解決することができますか? –

+1

SAX(旧式の処理モデル)を使用する必要はなく、STaXまたはVTD-XML –

+0

@Jimmyを使用することもできます。https://jaxb.dev.java.net/guide/Dealing_with_large_documents.html#Processing%5Fa %5F文書%5Fby%5Fchunk – skaffman

1

JAXBには、リフレクションを使用して、実行時にパーマスペースに追加されるクラスを作成するという追加の問題があります。 OutOfMemoryErrorが発生する可能性があります。

+0

多くの関連する回答(nostopoverflow.com/a/33431431/122727)noOptimizeについて。 – kubanczyk

2

あなたは確かにthis articleが は、JVM引数の下に追加

0

をこれらの問題を回避に役立つかもしれ技術を結合新しいデータを説明するのに役立つことがあり、過度のオブジェクト作成/破壊に結合するJava XMLデータのパフォーマンスとメモリの問題に遭遇することがあり

-Dcom.sun.xml.bind.v2.bytecode.ClassTailor.noOptimize=true 

https://issues.apache.org/jira/browse/CXF-2939

関連する問題