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)
おかげで、 ジェームズ・フォード
オブジェクトがserilaizedされるオブジェクトをナビゲートするとき、オブジェクトを書き込む必要があります。繰り返し参照する場合は、構造内のすべてのオブジェクトを記録する必要がありますが、オブジェクトの数が非常に多い場合を除き、これは重要ではありません。私はあなたができる最も簡単なことは、最大ヒープサイズを増やすことだと思う。 –
XMLと関連するjavaファイルの例が必要です... – Kartoch