$ 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. 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. 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