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

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

Пул строк (String Pool) — это множество строк в кучи (Java Heap Memory). Мы знаем, что String — особый класс в java, с помощью которого мы можем создавать строковые объекты.

На диаграмме ниже мы видим как именно строковый пул расположен в памяти Java Heap. И как разные способы создания строк влияют на расположение их в памяти.

String Pool Java Javadevblog.com

 

Сам строковый пул возможен только потому, что строки в Java неизменные. Также пул строк позволяет сохранить память в Java Runtime, хотя это и требует больше времени на создание самой строки.

Пример работы с пулом строк

Когда мы используем двойные кавычки, чтобы создать новую строку, то первым делом идет поиск строки с таким же значением в пуле строк. Если java такую строку нашла, то возвращает ссылку, в противном случае создается новая строка в пуле, а затем возвращается ссылка.

Однако использование оператора new заставляет класс String создать новый объект String. После этого можем использовать метод intern(), чтобы поместить этот объект в пул строк или обратиться к другому объекту из пула строк, который имеет такое же значение.

Ниже приведена программа, которая демонстрирует работу с пулом строк:

StringPool.java

Результат выполнения программы:

Что происходит внутри нашей программы отчетливо видно на диаграмме выше.

Следите за обновлениями на Javadevblog.com

4 thoughts to “Что такое пул строк в Java?”

  1. спасибо. очень понятно написано, но разве пул строк находится в хипе?насколько я знаю он хранится в permgen. меня просто немного сбила картинка в статье

    1. SERGII, не помню точно с какой версии Java, но пул строк был перенесен из PermGen в кучу.
      Да и сам PermGen уже переименовали в MetaSpace и сделали его вроде автоматически расширяемым.

  2. SERGII, не помню точно с какой версии Java, но пул строк был перенесен из PermGen в кучу.
    Да и сам PermGen уже переименовали в MetaSpace и сделали его вроде автоматически расширяемым.

Добавить комментарий для Mikhail Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *