String interning (WAS: SAX2/Java: Towards a final form)

Miles Sabin msabin at
Wed Jan 19 10:26:55 GMT 2000

David Megginson wrote,
> Tyler Baker wrote,
> > And foo == "x", then your only additional overhead to a 
> > straight identity test is the dynamic method invocation of 
> > String.equals().
> Only if the strings are equal -- if you're in a long switch 
> statement, most of them won't be equal, and the overhead will be 
> much more than the function call.

With a JIT that can inline this is a non-issue. We lose the
function call overhead, and the != case is actually the best
case for equals() ... we may only have to inspect the first
character to determine a mismatch. So the overhead boils down
to a few extra instructions and a few extra memory accesses.

This isn't just theoretical ... Hotspot does just that. In
fact I can't see any real reason why less ambitious JITs
shouldn't be able to do just as well, because,

* java.lang.String is final, so dynamic method invocation can
  be short-circuited.

* java.lang.String is magic: it has a special role in the
  language right down to the byte-code level. JITs can, and
  probably should, special case it.

I think it would be useful if people using JVMs with poor String
performance hassled the relevant vendors/maintainers and got them
to improve the situation.



Miles Sabin                       Cromwell Media
Internet Systems Architect        5/6 Glenthorne Mews
+44 (0)20 8817 4030               London, W6 0LJ, England
msabin at

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at
Archived as: or CD-ROM/ISBN 981-02-3594-1
Please note: New list subscriptions now closed in preparation for transfer to OASIS.

More information about the Xml-dev mailing list