2012-04-10 10 views
1

xstreamを使用してオブジェクトをxmlにファイルとしてシリアル化しています。私が直列化したいオブジェクトは非常に大きく、非常に複雑なツリー構造で構成されています。xstreamはヒープスペースをシリアライズ

XStream xStream = new XStream(); 

    xStream.omitField(Stat.class, "sources"); 
    String XMLFilename = "XML-" + dateString + ".xml"; 

    FileOutputStream outputStream = null; 

    Writer writer = null; 

    try { 
     outputStream = new FileOutputStream(currentWorkPath+XMLFilename); 
     writer = new OutputStreamWriter(outputStream, Charset.forName("UTF-8")); 
     xStream.toXML(ss, writer); 

    } catch (Exception exp) { 
     log.error(null, exp); 
    } finally { 
     writer = null; 
     outputStream = null; 
    } 

コードが正常に動作しますが、非常に大きなオブジェクトをシリアル化するとき、私は、メモリのエラーJavaヒープ領域から抜け出す:このために私は次のコードを使用しています。これを防ぐ方法がいくつかありますか?オブジェクトが成長しているので、その場でXMLを構築することは可能ですか?

他のXMLシリアライズライブラリですか?

例外:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at java.util.HashMap.addEntry(Unknown Source) 
    at java.util.HashMap.put(Unknown Source) 
    at com.thoughtworks.xstream.core.util.ObjectIdDictionary.associateId(ObjectIdDictionary.java:91) 

おかげで、 ジェームズ・フォード

+0

オブジェクトがserilaizedされるオブジェクトをナビゲートするとき、オブジェクトを書き込む必要があります。繰り返し参照する場合は、構造内のすべてのオブジェクトを記録する必要がありますが、オブジェクトの数が非常に多い場合を除き、これは重要ではありません。私はあなたができる最も簡単なことは、最大ヒープサイズを増やすことだと思う。 –

+0

XMLと関連するjavaファイルの例が必要です... – Kartoch

答えて

0

はあなたがクラスパス上(EXをサーバー上で。)Xpp3ライブラリを持っていますか?クラスパス上のXpp3(または他の同様のライブラリ)を使わないでJava 5以降のXStreamはDOMドライバを使用します。私はこれを疑うことしかできません。

関連する問題