$ java -XX:+UseCompactObjectHeaders StringLayout      (JDK 25)
java.version = 25.0.4.1
vm.flags     = -XX:+EnableDynamicAgentLoading -XX:+UseCompactObjectHeaders
# 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       int String.hash               N/A
 12   1      byte String.coder              N/A
 13   1   boolean String.hashIsZero         N/A
 14   2           (alignment/padding gap)   
 16   4    byte[] String.value              N/A
 20   4           (object alignment gap)    
Instance size: 24 bytes
Space losses: 2 bytes internal + 4 bytes external = 6 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)     0x0017940000000001 (Lilliput)
  8   4       int String.hash               0
 12   1      byte String.coder              0
 13   1   boolean String.hashIsZero         false
 14   2           (alignment/padding gap)   
 16   4    byte[] String.value              [104, 101, 108, 108, 111]
 20   4           (object alignment gap)    
Instance size: 24 bytes
Space losses: 2 bytes internal + 4 bytes external = 6 bytes total

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

=== the byte[] behind each
[B object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x00174c0000000001 (Lilliput)
  8   4        (array length)            5
 12   5   byte [B.<elements>             N/A
 17   7        (object alignment gap)    
Instance size: 24 bytes
Space losses: 0 bytes internal + 7 bytes external = 7 bytes total

[B object internals:
OFF  SZ   TYPE DESCRIPTION               VALUE
  0   8        (object header: mark)     0x00174c0000000001 (Lilliput)
  8   4        (array length)            10
 12  10   byte [B.<elements>             N/A
 22   2        (object alignment gap)    
Instance size: 24 bytes
Space losses: 0 bytes internal + 2 bytes external = 2 bytes total

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