Add compact-strings module: Compact Strings (JEP 254) measured with JOL on JDK 25, with and without -XX:-CompactStrings, and compact object headers on 25 vs 27
Co-Authored-By: Claude Sonnet 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01KqJyCidz3ZgRyHABv2GVJh
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
$ java Upgrade (JDK 25)
|
||||
java.version = 25.0.4.1
|
||||
"hello" (literal) length=5 coder=0 byte[].length=5
|
||||
"h\u00E9llo" (e-acute, Latin-1 supplement) length=5 coder=0 byte[].length=5
|
||||
"h\u20ACllo" (euro sign) length=5 coder=1 byte[].length=10
|
||||
"hello" + "\u20AC" (concat) length=6 coder=1 byte[].length=12
|
||||
wide = "\u20ACabcdef" length=7 coder=1 byte[].length=14
|
||||
wide.substring(1) (all Latin-1 again) length=6 coder=0 byte[].length=6
|
||||
wide.replace('\u20AC', 'E') length=7 coder=0 byte[].length=7
|
||||
wide.toLowerCase() length=7 coder=1 byte[].length=14
|
||||
new String("caf\u00E9".getBytes(UTF_8), UTF_8) length=4 coder=0 byte[].length=4
|
||||
new String(utf8 bytes of ASCII, UTF_8) length=5 coder=0 byte[].length=5
|
||||
new String(char[] {'a','b'}) length=2 coder=0 byte[].length=2
|
||||
new String(char[] {'a','\u4E2D'}) length=2 coder=1 byte[].length=4
|
||||
"\uD83D\uDE00" (emoji, a surrogate pair) length=2 coder=1 byte[].length=4
|
||||
StringBuilder("ascii only").toString() length=10 coder=0 byte[].length=10
|
||||
... after append('\u20AC'), toString() length=11 coder=1 byte[].length=22
|
||||
... after setLength(0) + ASCII, toString() length=13 coder=0 byte[].length=13
|
||||
length() of the emoji: 2 (UTF-16 code units, not code points)
|
||||
|
||||
$ java -XX:-CompactStrings Upgrade (JDK 25)
|
||||
java.version = 25.0.4.1
|
||||
"hello" (literal) length=5 coder=1 byte[].length=10
|
||||
"h\u00E9llo" (e-acute, Latin-1 supplement) length=5 coder=1 byte[].length=10
|
||||
"h\u20ACllo" (euro sign) length=5 coder=1 byte[].length=10
|
||||
"hello" + "\u20AC" (concat) length=6 coder=1 byte[].length=12
|
||||
wide = "\u20ACabcdef" length=7 coder=1 byte[].length=14
|
||||
wide.substring(1) (all Latin-1 again) length=6 coder=1 byte[].length=12
|
||||
wide.replace('\u20AC', 'E') length=7 coder=1 byte[].length=14
|
||||
wide.toLowerCase() length=7 coder=1 byte[].length=14
|
||||
new String("caf\u00E9".getBytes(UTF_8), UTF_8) length=4 coder=1 byte[].length=8
|
||||
new String(utf8 bytes of ASCII, UTF_8) length=5 coder=1 byte[].length=10
|
||||
new String(char[] {'a','b'}) length=2 coder=1 byte[].length=4
|
||||
new String(char[] {'a','\u4E2D'}) length=2 coder=1 byte[].length=4
|
||||
"\uD83D\uDE00" (emoji, a surrogate pair) length=2 coder=1 byte[].length=4
|
||||
StringBuilder("ascii only").toString() length=10 coder=1 byte[].length=20
|
||||
... after append('\u20AC'), toString() length=11 coder=1 byte[].length=22
|
||||
... after setLength(0) + ASCII, toString() length=13 coder=1 byte[].length=26
|
||||
length() of the emoji: 2 (UTF-16 code units, not code points)
|
||||
Reference in New Issue
Block a user