Sobes.tech
Junior
94
questionbank

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

Ответ от нейросети

sobes.tech AI

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.

// Ссылается на объект в String Pool
String s1 = "Hello";

// Ссылается на объект в String Pool (тот же, что и s1)
String s2 = "Hello";

// Создает новый объект в куче, не в String Pool
String s3 = new String("Hello");

// Ссылается на объект в String Pool, если его там еще нет.
// Если есть, возвращает ссылку на существующий объект.
String s4 = s3.intern();

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

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

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