W skrócie:
- Na pamięć obiektu String składa się 24 byte na metadane + ilość znaków razy 1 byte lub 2 byte w zależności od wartości coder
- Metadane : mark word x2 (4 bytes x2 = 8 bytes), klass word (4 bytes), referencja do tablicy byte[] lub char[] (4 byte), hash (4 byte), hashIsZero (1 byte), coder (1 byte), padding (2 byte)
- Obiekt String ma 2 dodatkowe flagi:
- gdy
coder =1
to kodowanie UTF-16 (2 bytes na znak) - gdy
coder = 0
to kodowanie LATIN-1 (1 byte na znak) - hashIsZero jest to flaga która mówi czy obliczenie hasha zostało już wykonane