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