Hi Dave,

It's being interned for the application. Allows your SAX content handler to
compare the names of elements, attributes, etc... using reference
comparison [1] instead of equals for better performance. There's an
alternate implementation of the SymbolTable [2] which is more sensitive to
memory usage. It allows interned strings to be garbage collected if they're
only reachable through the SymbolTable.

Thanks.

[1] http://xerces.apache.org/xerces2-j/features.html#string-interning
[2]
http://xerces.apache.org/xerces2-j/javadocs/xerces2/org/apache/xerces/util/SoftReferenceSymbolTable.html

Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: [EMAIL PROTECTED]
E-mail: [EMAIL PROTECTED]

"Dave Brosius" <[EMAIL PROTECTED]> wrote on 01/09/2008 01:01:06 AM:

> Greetings, i was purusing old mailing list emails, and stumbled onto the
> following email sent some time ago :)
>
> Luckily, from a quick perusal of the code, it appears that the email
still
> applies.
>
> I have a question about the implementation of SymbolTable
>
> As expected, it appears to me to that it does hashing to find a bucket,
then
> walks the chain of pointers from the bucket to find a string that is
> 'equals'
>
> Only if it doesn't exist is a new one added. All of this makes sense.
>
> The question i have then, is why when you add an entry
>
> public Entry(String symbol, Entry next) {
>     this.symbol = symbol.intern();
>     characters = new char[symbol.length()];
>     symbol.getChars(0, characters.length, characters, 0);
>     this.next = next;
> }
>
> does the code intern the string? Isn't the point of this class to stop
> pollution of the constant pool and perm gen? (besides allowing for
alternate
> hashing?)
> Given that the one String that lives in the SymbolTable is returned, i
would
> think intern is redundant.
>
> thanks,
> dave
>
> ----- Original Message -----
> From: "Michael Glavassevich" <[EMAIL PROTECTED]>
> To: <[email protected]>
> Sent: Sunday, July 24, 2005 11:57 AM
> Subject: Re: Interning strategy
>
>
> Elliotte Harold <[EMAIL PROTECTED]> wrote on 07/22/2005 09:35:02 PM:
>
> > Suppose I turn on interning in the parser by setting the SAX property
> > http://xml.org/sax/features/string-interning to true. Will Xerces
simply
>
> > invoke the String.intern() method on the strings it creates or does it
> > do something fancier like maintaining its own pool of string constants
> > and reuse those?
>
> It maintains a pool. See org.apache.xerces.util.SymbolTable, specifically
> the addSymbol() methods.
>
> > --
> > Elliotte Rusty Harold  [EMAIL PROTECTED]
> > XML in a Nutshell 3rd Edition Just Published!
> > http://www.cafeconleche.org/books/xian3/
> > http://www.amazon.com/exec/obidos/ISBN=0596007647/cafeaulaitA/ref=nosim
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
>
> Michael Glavassevich
> XML Parser Development
> IBM Toronto Lab
> E-mail: [EMAIL PROTECTED]
> E-mail: [EMAIL PROTECTED]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to