Ich verwende Xstream, um ein Objekt in Xml als Datei serialisieren. Das Objekt, das ich serialisieren möchte, ist sehr groß und besteht aus einer ziemlich komplizierten Baumstruktur. Dazu verwende ich den folgenden Code:Xstream serialisieren Heap-Speicherplatz
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;
}
Der Code funktioniert gut, aber ich aus Speicherfehler Java Heap-Speicher, wenn sehr große Objekte serialisiert. Gibt es einen Weg, dies zu verhindern? Ist es möglich, das XML im laufenden Betrieb zu erstellen, während das Objekt wächst?
Oder vielleicht eine andere XML-Serialisierungsbibliothek?
Ausnahme:
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)
Danke, James Ford
Es sollte das Objekt schreiben, während es das zu serilisierende Objekt navigiert. Bei wiederholten Verweisen muss jedes Objekt in der Struktur aufgezeichnet werden, aber wenn Sie nicht über eine große Anzahl von Objekten verfügen, sollte dies nicht von Bedeutung sein. Ich vermute, die einfachste Sache, die Sie tun können, ist die maximale Größe des Heap zu erhöhen. –
Wir brauchen ein Beispiel für das XML und die zugehörigen Java-Dateien ... – Kartoch