[lworld] RFR: 8373787: [lworld] InstanceKlass::size mixes bytes and words

Stefan Karlsson stefank at openjdk.org
Tue Dec 16 12:33:06 UTC 2025


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

-------------

Commit messages:
 - 8373787: [lworld] InstanceKlass::size mixes bytes and words

Changes: https://git.openjdk.org/valhalla/pull/1804/files
  Webrev: https://webrevs.openjdk.org/?repo=valhalla&pr=1804&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8373787
  Stats: 4 lines in 2 files changed: 0 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/valhalla/pull/1804.diff
  Fetch: git fetch https://git.openjdk.org/valhalla.git pull/1804/head:pull/1804

PR: https://git.openjdk.org/valhalla/pull/1804


More information about the valhalla-dev mailing list