Junior
45
questionbank

Что такое String Pool в Java?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

String Pool (также известен как String Intern Pool) — это специальная область памяти в Java с куче (Heap), где виртуальная машина JVM хранит строковые литералы (String literals).

При создании строкового литерала, например String s = "Hello";, JVM сначала проверяет, существует ли строка с таким же значением в String Pool.

  • Если строка уже существует, переменная s будет указывать на существующий объект в String Pool.
  • Если строка не существует, создается новый объект строки в String Pool, и переменная s указывает на этот новый объект.

Это оптимизация, которая позволяет сэкономить память за счет повторного использования одинаковых строковых значений.

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

java
  • s1 == s2 будет true.
  • s1 == s3 будет false.
  • s1 == s4 будет true.

Метод intern() позволяет явно поместить строку в String Pool или получить к ней ссылку, если она уже там есть.

До Java 7 String Pool находился в PermGen (область памяти для метаданных классов), а начиная с Java 7 — в Heap.