Hi again!
After testing the same sample program as in my original posting
"cloneNode() eats memory?" with the old xml4j classes I found
that they did not eat the memory as the xerces-J classes do.
This is the sample program:
<CODE>
import org.w3c.dom.*;
import com.ibm.xml.dom.*;
import com.ibm.xml.parsers.DOMParser;
public class CloneTest {
public static void main(String[] args) {
// Parse the document
DOMParser parser = new DOMParser();
try {
parser.parse("clonetest.xml");
}
catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
// Get some_node
Node someNode = null;
try {
someNode =
parser.getDocument().getElementsByTagName("some_node").item(0);
} catch (Exception e) {
e.printStackTrace();
System.exit(0);
}
// Make clones
for (int i=0; i<=100; i++) {
Node clonedNode = ((NodeImpl)someNode).cloneNode(true);
clonedNode = null;
if ((i%10) == 0) {
System.gc(); System.runFinalization();
Runtime rt = Runtime.getRuntime();
System.out.println("Memory usage after " + i + " clones: " +
(rt.totalMemory()-rt.freeMemory()));
}
}
}
}
</CODE>
This is the output using xerces-J:
Memory usage after 0 clones: 2206416
Memory usage after 1000 clones: 2831232
Memory usage after 2000 clones: 3455232
Memory usage after 3000 clones: 4079232
Memory usage after 4000 clones: 4703232
Memory usage after 5000 clones: 5327232
Memory usage after 6000 clones: 5951232
Memory usage after 7000 clones: 6575232
Memory usage after 8000 clones: 7199232
Memory usage after 9000 clones: 7823232
Memory usage after 10000 clones: 8447232
This is the output using xml4j:
Memory usage after 0 clones: 2362576
Memory usage after 1000 clones: 2363400
Memory usage after 2000 clones: 2363400
Memory usage after 3000 clones: 2363400
Memory usage after 4000 clones: 2363400
Memory usage after 5000 clones: 2363400
Memory usage after 6000 clones: 2363400
Memory usage after 7000 clones: 2363400
Memory usage after 8000 clones: 2363400
Memory usage after 9000 clones: 2363400
Memory usage after 10000 clones: 2363400
This indicates some sort of memory leak in the xerces-J classes.
Anyone who can help me out nailing it?
Regards,
/Christian Lizell