5 ms·
Allocation on the JVM: Down the rabbit hole
- haneefmubarak 10y agoSo... Why exactly does it need 24 bytes if a long is only 8 bytes (64 bits)?
- kaushiks 10y agoFor the 16 byte (on x86_64) header (markOop, klass *).
- jcdavis 10y agoThe 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 10y agoAnd 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.
- alblue 10y agoOne 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-stringbuilder.html 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.
- antoaravinth 10y agoI 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!