Gymterview
junior

Что такое пул строк?

Пул строк – это набор строк, хранящийся в Heap.

  • Пул строк возможен благодаря неизменяемости строк в Java и реализации идеи интернирования строк;
  • Пул строк помогает экономить память, но по этой же причине создание строки занимает больше времени;
  • Когда для создания строки используются ", то сначала ищется строка в пуле с таким же значением, если находится, то просто возвращается ссылка, иначе создается новая строка в пуле, а затем возвращается ссылка на неё;
  • При использовании оператора new создаётся новый объект String. Затем при помощи метода intern() эту строку можно поместить в пул или же получить из пула ссылку на другой объект String с таким же значением;
  • Пул строк является примером паттерна «Приспособленец» (Flyweight).

Начиная с Java 9, в рамках оптимизации Compact Strings (JEP 254) внутреннее представление строк было изменено: вместо массива char[] (где каждый символ занимает 2 байта) используется массив byte[] с дополнительным полем coder, которое указывает кодировку (Latin-1 или UTF-16). Если строка содержит только символы Latin-1 (а это подавляющее большинство строк в типичных приложениях), она хранится в 1 байт на символ, что существенно экономит память. Эта оптимизация применяется и к строкам в пуле.