2017-08-24 16 views
2

私はJDOM2を使用してXMLを読み込もうとしています。 私のコンピュータでテストしていましたが、問題なく動作しました。 問題は、Windows Server 2012でこのプログラムを使用しようとしたときに開始されました。ドキュメントから子を取得しようとすると「ヒープスペース」エラーが発生するためです。 Windows Server上の仮想マシンにメモリを追加しようとしましたが、動作しませんでした。JDOM2で子供を得るヒープスペース

"SlimJDOMFactory"オプションを成功させようとしましたが、

文書のサイズは約150MBで、合計で20,000要素があります。

何ができますか?

ここは私のコードの一部です。

List<prescription> medicamentos = new ArrayList<prescription>(); 
SAXBuilder builder = new SAXBuilder(); 
builder.setJDOMFactory(new SlimJDOMFactory()); 
File prescriptionFile = new File("Download" + File.separator + "Prescripcion.xml"); 
try { 
    Document document = (Document) builder.build(prescriptionFile); 
    Element rootNode = document.getRootElement(); 
    List<Element> list = rootNode.getChildren();  

    ......... 

} catch(Exception a) { 
} 

答えて

1

DOMは完全なxmlドキュメントを読み取り、RAMに読み込みます。 RAMのサイズに問題がある場合は、SAXまたはStAXのような別のxml解析ライブラリを使用することを検討する必要があります。

これらのいずれかを使用すると、XMLファイルから選択的に読み取ることができるため、コードが高速化されます。 違いの詳細については、この質問をご覧ください。Java: Parsing XML files: DOM, SAX or StAX?

このtutorialはすべての用途を説明しています。

0

Javaは、Javaコマンドラインで許可するのと同じくらい多くのメモリを消費します。 VMにメモリを追加するだけでは、Javaがそのメモリを使用することはできません。

メモリを追加するには、Javaコマンドラインの-Xmxフラグを使用する必要があります。典型的には、少なくとも文字スペースの256メガバイト、プラスオーバーヘッドのためにいくつかのより多くを取る128MBのXMLを()含むのに十分すぎるほどであるべきである(Javaは512MBのメモリを使用できるように-Xmx512mを追加する。

Java java commandline helpを参照してください考えてみましょう。

+0

私は試してみましたが、うまくいきませんでした。Windows Server以外のすべてのコンピュータで動作しますが、Windows Serverに問題があるかどうかは疑問でしたとjava :( – Jaume

関連する問題