1. Обзор
Строки
в Java внутренне представлены char[]
, содержащим символы String
. И каждый char
состоит из 2 байтов, потому что Java внутри использует UTF-16.
Например, если строка
содержит слово на английском языке, все первые 8 битов будут равны 0 для каждого char
, поскольку символ ASCII может быть представлен одним байтом.
Для представления многих символов требуется 16 бит, но по статистике для большинства требуется всего 8 бит — представление символов LATIN-1. Таким образом, есть возможность улучшить потребление памяти и производительность.
Также важно то, что String
обычно обычно занимают большую часть пространства кучи JVM. И из-за того, как они хранятся в JVM, в большинстве случаев экземпляр String
может занимать вдвое больше места , чем ему действительно нужно .
В этой статье мы обсудим опцию Compressed String, представленную в JDK6, и новую компактную строку, недавно представленную в JDK9. Оба они были разработаны для оптимизации потребления памяти строками в JMV.