Где хранятся объекты с типом String

«Где хранятся объекты с типом String» — вопрос из категории Управление памятью, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Объекты String в Java (и, соответственно, Android) хранятся в String Pool (пуле строк), который находится в Heap (куче).

  • String Pool — это специальная область Heap, где JVM хранит уникальные строковые литералы для оптимизации памяти.
  • При создании строки через литерал (String s = "hello"), JVM сначала ищет её в пуле. Если находит — возвращает ссылку, иначе — добавляет.
  • При создании через new String("hello") объект создаётся в куче вне пула (но можно добавить вручную через intern()).
String s1 = "hello"; // В пуле
String s2 = new String("hello"); // В куче, вне пула
String s3 = s2.intern(); // Добавлено в пул (если не было)

Важно: Начиная с Java 7, String Pool перемещён в Heap (раньше был в PermGen).