Wenn ein String nur aus Latin-1 Buchstaben besteht, dann kann die Zeichenfolge aus einem byte- statt einem char-Feld bestehen. Diese Änderung wurde in Java 9 nun umgesetzt: http://hg.openjdk.java.net/jdk9/jdk9/jdk/rev/4f6e52f9dc79. Gerade bei IDs lässt sich so 1/2 vom Speicher sparen. Und da Strings immutable sind, muss man nicht konvertieren.
Teurer wird es beim „Mischen“ wie:
String /*intern char[]*/ s = "λφα"; String /*intern char[]*/ t = " " /*intern byte[]*/ + s /*intern char[]*/;
Intern wird hier eine inflate()-Methoden aufgerufen:
If the coder is "isLatin1", this inflates the internal 8-bit storage to 16-bit <hi=0, low> pair storage.