$ java -XX:-UseCompactObjectHeaders StringLayout      (JDK 27)
java.version = 27
vm.flags     = -XX:+EnableDynamicAgentLoading -XX:-UseCompactObjectHeaders
# WARNING: Unable to attach Serviceability Agent. sun.jvm.hotspot.runtime.VM.isCompressedKlassPointersEnabled()
# 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)    0x0017b7d8
 12   4       int String.hash               0
 16   1      byte String.coder              0
 17   1   boolean String.hashIsZero         false
 18   2           (alignment/padding gap)   
 20   4    byte[] String.value              [104, 101, 108, 108, 111]
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)    0x0017b7d8
 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)     0x0000000000000009 (non-biasable; age: 1)
  8   4        (object header: class)    0x00178240
 12   4        (array length)            5
 16   5   byte [B.<elements>             N/A
 21   3        (object alignment gap)    
Instance size: 24 bytes
Space losses: 0 bytes internal + 3 bytes external = 3 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)    0x00178240
 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         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      24     48
    1  U+00E9        0              1      24      24     48
    1  U+20AC        1              2      24      24     48
    5  ASCII         0              5      24      24     48
    5  U+00E9        0              5      24      24     48
    5  U+20AC        1             10      24      32     56
   10  ASCII         0             10      24      32     56
   10  U+00E9        0             10      24      32     56
   10  U+20AC        1             20      24      40     64
   20  ASCII         0             20      24      40     64
   20  U+00E9        0             20      24      40     64
   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     120    144
  100  U+00E9        0            100      24     120    144
  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
