Что такое 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.