>> I was looking in the org.apache.xalan.lib.ExsltStrings class, and every
>> call to tokenize references a cached static Document instance. Could
>> this
>> be causing all resulting all created Elements in every invocation of
>> tokenize() to get retained in the JVM forever? It almost seems as such,
>> given the number of these <token> elements piling up in my application's
>> heap.
> If it's cached at the Templates level, that's a bad implementation
> decision, since it not only has to be synchronized, but it will exist for
> as long as the Templates object exists.

I was trying to follow the code with what happens when the tokenize
function returns its new NodeSet (aka NodeList) instance of <token>
elements, and I think it goes into

new XNodeSetForDOM((org.w3c.dom.NodeList)val, xctxt);

new org.apache.xpath.NodeSetDTM(nodeList, xctxt);

xctxt.getDTMHandleFromNode(node);

DOM2DTM dtm = (DOM2DTM) getDTM(new javax.xml.transform.dom.DOMSource(root),
                                                                                
                                                                 false, null, 
true, true);

synchronized public void addDTM(DTM dtm, int id, int offset) (in
DTMManagerDefault)

So there is a new DOM2DTM instance for every NodeSet returned by this
function, and it would have been added to the DTMManager's m_dtm array.

But I can't see how that side-effect NodeSet turned DOM2DTM will
eventually be released by the DTMManager. Maybe it will never be, and
that's the problem?

So this is looking like I should find a way to not use the EXSLT tokenize
function in a long-running application. If anyone has any insight into
this effect, I'd greatly appreciate it.

-- m@



Reply via email to