[jdom-interest] JDOM parser reuse memory problem

Michael Kay mike at saxonica.com
Thu Nov 10 09:57:46 PST 2011

On 10/11/2011 17:24, Randall Theobald wrote:
> Hi, I'm a performance analyst and found a spot where a product I'm
> analyzing is using JDOM. We are creating new SAXBuilders on each thread and
> are ending up with a hot lock on the classloader when trying to load up the
> XMLReader. I saw that the underlying parser in SAXBuilder can be reused,
> thus leading to a proper pooling strategy, but I have a memory concern. In
> the case where the parser is reused, nothing is cleared from it at the end
> of the build method (so the content handler is still held, which can
> reference lots of objects). Since SAXBuilder doesn't expose a way to clear
> anything on the reused parser, the only option is using ugly reflection to
> clear it, or to use (slightly less ugly) WeakReferences to the SAXBuilders
> in my pool so that they evenutally get cleaned up.
> Is there a reason that the content handler on 'this.parser' isn't set to
> null along with the local content handler being set to null in the finally
> block of the build method? If not, I'd suggest this change.
I have the same problem in Saxon. When returning a parser to the pool I 
set all the callbacks to null (ContentHandler, lexicalHandler, etc). 
Unfortunately some XMLReader implementations don't allow the callback to 
be set to null (the specs aren't explicit on the point). One approach is 
to catch the exception, another is to set a dummy ContentHandler or 
whatever that doesn't have any references to anything. Messy.

Michael Kay

More information about the jdom-interest mailing list