String Pool (также известен как String Intern Pool) — это специальная область памяти в Java с куче (Heap), где виртуальная машина JVM хранит строковые литералы (String literals).
При создании строкового литерала, например String s = "Hello";, JVM сначала проверяет, существует ли строка с таким же значением в String Pool.
s будет указывать на существующий объект в 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.