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

Reply via email to