Hacker News new | past | comments | ask | show | jobs | submit login
Allocation on the JVM: Down the rabbit hole (jcdav.is)
93 points by jcdavis on July 11, 2016 | hide | past | favorite | 6 comments



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...

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.


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


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


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.


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.


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!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: