$ java -XX:-CompactStrings StringLayout      (JDK 25)
java.version = 25.0.4.1
vm.flags     = -XX:+EnableDynamicAgentLoading -XX:-CompactStrings
# Field sizes:            4,    1,    1,    2,    2,    4,    4,    8,    8
# Array element sizes:    4,    1,    1,    2,    2,    4,    4,    8,    8

=== java.lang.String, the class
java.lang.String object internals:
OFF  SZ      TYPE DESCRIPTION               VALUE
  0   8           (object header: mark)     N/A
  8   4           (object header: class)    N/A
 12   4       int String.hash               N/A
 16   1      byte String.coder              N/A
 17   1   boolean String.hashIsZero         N/A
 18   2           (alignment/padding gap)   
 20   4    byte[] String.value              N/A
Instance size: 24 bytes
Space losses: 2 bytes internal + 0 bytes external = 2 bytes total

=== one Latin-1 string and one UTF-16 string, field by field
java.lang.String object internals:
OFF  SZ      TYPE DESCRIPTION               VALUE
  0   8           (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4           (object header: class)    0x4d001e38
 12   4       int String.hash               0
 16   1      byte String.coder              1
 17   1   boolean String.hashIsZero         false
 18   2           (alignment/padding gap)   
 20   4    byte[] String.value              [104, 0, 101, 0, 108, 0, 108, 0, 111, 0]
Instance size: 24 bytes
Space losses: 2 bytes internal + 0 bytes external = 2 bytes total

java.lang.String object internals:
OFF  SZ      TYPE DESCRIPTION               VALUE
  0   8           (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4           (object header: class)    0x4d001e38
 12   4       int String.hash               0
 16   1      byte String.coder              1
 17   1   boolean String.hashIsZero         false
 18   2           (alignment/padding gap)   
 20   4    byte[] String.value              [104, 0, -84, 32, 108, 0, 108, 0, 111, 0]
Instance size: 24 bytes
Space losses: 2 bytes internal + 0 bytes external = 2 bytes total

=== the byte[] behind each
[B object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4        (object header: class)    0x4d000a00
 12   4        (array length)            10
 16  10   byte [B.<elements>             N/A
 26   6        (object alignment gap)    
Instance size: 32 bytes
Space losses: 0 bytes internal + 6 bytes external = 6 bytes total

[B object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x0000000000000001 (non-biasable; age: 0)
  8   4        (object header: class)    0x4d000a00
 12   4        (array length)            10
 16  10   byte [B.<elements>             N/A
 26   6        (object alignment gap)    
Instance size: 32 bytes
Space losses: 0 bytes internal + 6 bytes external = 6 bytes total

=== footprint by length (String object + its byte[], via GraphLayout)
chars  content   coder  byte[].length  String  byte[]  total
    0  ASCII         1              0      24      16     40
    0  U+00E9        1              0      24      16     40
    0  U+20AC        1              0      24      16     40
    1  ASCII         1              2      24      24     48
    1  U+00E9        1              2      24      24     48
    1  U+20AC        1              2      24      24     48
    5  ASCII         1             10      24      32     56
    5  U+00E9        1             10      24      32     56
    5  U+20AC        1             10      24      32     56
   10  ASCII         1             20      24      40     64
   10  U+00E9        1             20      24      40     64
   10  U+20AC        1             20      24      40     64
   20  ASCII         1             40      24      56     80
   20  U+00E9        1             40      24      56     80
   20  U+20AC        1             40      24      56     80
   40  ASCII         1             80      24      96    120
   40  U+00E9        1             80      24      96    120
   40  U+20AC        1             80      24      96    120
  100  ASCII         1            200      24     216    240
  100  U+00E9        1            200      24     216    240
  100  U+20AC        1            200      24     216    240
 1000  ASCII         1           2000      24    2016   2040
 1000  U+00E9        1           2000      24    2016   2040
 1000  U+20AC        1           2000      24    2016   2040
