[lworld] RFR: 8373787: [lworld] InstanceKlass::size mixes bytes and words
Stefan Karlsson
stefank at openjdk.org
Tue Dec 16 17:08:15 UTC 2025
On Tue, 16 Dec 2025 12:26:42 GMT, Stefan Karlsson <stefank at openjdk.org> wrote:
> The following function in `InstanceKlass` is supposed to return size in words:
>
> static int size(int vtable_length, int itable_length,
> int nonstatic_oop_map_size,
> bool is_interface,
> bool is_inline_type) {
> return align_metadata_size(header_size() +
> vtable_length +
> itable_length +
> nonstatic_oop_map_size +
> (is_interface ? (int)sizeof(Klass*)/wordSize : 0) +
> (is_inline_type ? (int)sizeof(InlineKlassFixedBlock) : 0));
> }
>
> but `sizeof(InlineKlassFixedBlock)` returns a size in bytes. This adds 640 bytes instead of 80 bytes to all InlineKlasses.
>
> This can be seen by running `jcmd <pid> VM.classes` to check the size of the InlineKlass of Integer before and after the fix for this:
>
> Before:
>
> 0x00000ffc0024d260 167 fully_initialized WS java.lang.Integer
>
> After:
>
> 0x000001800024d260 97 fully_initialized WS java.lang.Integer
>
>
> That is in words. So this bug added an extra `(167 - 97) * 8 == 560` bytes.
>
> I've so far only done some local smoke testing with TEST=hotspot_valhalla
Thanks for all the reviews! This passes tier1-3 and TEST=hotspot_valhalla and TEST=jdk_valhalla locally. I'm marking this for integration.
-------------
PR Comment: https://git.openjdk.org/valhalla/pull/1804#issuecomment-3661537255
More information about the valhalla-dev
mailing list