/ / Was ist der korrekte Lebenszyklus eines DOM-Knotens in Java? - Java, XML, Dom, Speicherverwaltung, Lebenszyklus

Was ist der richtige Lebenszyklus eines DOM-Knotens in Java? - Java, XML, Dom, Speicherverwaltung, Lebenszyklus

Ich frage mich, ob der folgende Code in Bezug auf das Lifecycle-Management und das daraus resultierende Speichermanagement korrekt ist:

org.w3c.dom.Document document = // some document

// Some long-running loop
for (;;) {

// This element has "document" as its owner. But it is never added as a child
// element into the document. It can be GC"ed at the end of the loop
Element abc = document.createElement("abc");
}

Solche vorübergehenden Elemente (oder DocumentFragment, usw.) kann häufig bei umfangreichen DOM-Manipulationen verwendet werden. In Xerces, der Standard-DOM-Implementierung von Java, enthält das Element einen Verweis auf das Dokument, das Element ist dem Dokument jedoch nicht bekannt. Dadurch kann der Garbage Collector diese Elemente bereinigen, wenn ihr Gültigkeitsbereich gelöscht wird (dh am Ende) Dies ist jedoch in der API nicht explizit als solches dokumentiert. Andererseits sehe ich keine Operation in der DOM-API, die das "Deaktivieren" zulässt. abc"s Besitzerdokument.

Meine Frage lautet: Geht ich zu Recht davon aus, dass ein DOM-Dokument niemals Verweise auf die Knoten enthält, mit denen es erstellt wird createXXX(), unabhängig von der Implementierung? Oder gibt es eine Implementierung, bei der das oben Genannte zu einem Speicherverlust führen könnte?

Antworten:

1 für die Antwort № 1

Vielleicht könnten Sie sich mehrere DOM ansehenImplementierungen Source Base und sehen, wie sie sich verhalten und daraus einige Schlussfolgerungen ziehen? Ist das Problem, dass Sie keine Kontrolle über die zur Laufzeit Ihrer Anwendung verwendete DOM-Implementierung haben, oder die Tatsache, dass die Implementierung von Ihren Anwendungsbenutzern geändert werden kann und diese diese häufig ändern?

Aber wenn es keinen spezifischen Vertrag gibt, der in definiert istIch befürchte, dass es im Javadoc der document.createXXX-Methoden keine sichere Wette auf genaues Verhalten geben wird. Die einzige Option, bei der ich absolut sicher sein kann, ist, die Implementierung von DOM zu kontrollieren und dessen Verhalten zu kennen ...