Re: how actually string store in java machine
On 3/26/2014 7:37 PM, markspace wrote:
On 3/26/2014 10:54 AM, Eric Sosman wrote:
... prints
Foo.HELLO == "Hello": true
... on my Java 1.7.0_51 system. You might also want to re-read
Section 3.10.5 of the Java Language Specification; for Java 7 and 8
it reads (in part)
Well, that I did not expect. No wonder it takes so long to load a class
if each class has to be parsed for string literals and each one added to
a hash map someplace.
There's surely no parsing to speak of. The string literals'
data arrives in the class' constant pool, along with a lot of
other stuff, and is pretty easily located therein. I suspect
that the time required to fish them out and intern() them is
peanuts compared to the time spent on the rest of class loading
and initialization (but I have absolutely no data to support my
suspicion). And then there's the JIT ...
Grrr, I'm actually mad about that. String are *required* to be
intern'd?! That's really funky.
I think so, too. It feels like an implementation detail
that might better have been left unspecified. Similarly, I
feel that the span of pooled Integer and suchlike objects ought
not to be part of the language definition, but should have been
left to the discretion of a JVM's implementors.
--
Eric Sosman
esosman@comcast-dot-net.invalid