
Allocation on the JVM: Down the rabbit hole - jcdavis
http://jcdav.is/2016/07/11/JVM-allocation-secrets/
======
alblue
One other way of finding how much memory is used is to enlist JMH's -prof gc
option to see what gets generated between runs. I used this to see what
StringBuffer did in [http://alblue.bandlem.com/2016/04/jmh-stringbuffer-
stringbui...](http://alblue.bandlem.com/2016/04/jmh-stringbuffer-
stringbuilder.html)

You can run the test with and without C2 (eg with -Xint) to see the effects on
the inlining/escape analysis, and (on Linux) with -prof asm to see where the
code is taking time.

------
haneefmubarak
So... Why exactly does it need 24 bytes if a long is only 8 bytes (64 bits)?

~~~
kaushiks
For the 16 byte (on x86_64) header (markOop, klass *).

~~~
jcdavis
The header is only 12 bytes with compressedOops (which most people use), but
the long is aligned on an 8 byte boundary so the advantage is wasted here.

~~~
alblue
And even if the long wasn't on an aligned boundary, the object itself is. So
you either have padding at the start or end of the object.

------
antoaravinth
I always love to see the under hood concepts. I open articles like these and
give up reading half way through. As the text goes I will be lost in air. Is
there any book which explains JVM underhood process? If so it will be great!

