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

Miles Sabin msabin at cromwellmedia.co.uk
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.

Cheers,


Miles

-- 
Miles Sabin                       Cromwell Media
Internet Systems Architect        5/6 Glenthorne Mews
+44 (0)20 8817 4030               London, W6 0LJ, England
msabin at cromwellmedia.com          http://www.cromwellmedia.com/


xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ 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