Что хранится в куче (heap) в Java?

«Что хранится в куче (heap) в Java?» — вопрос из категории Java Core, который задают на 24% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Куча (heap) — это область динамической памяти в JVM, где хранятся все объекты и массивы, созданные во время выполнения программы.

Что хранится в heap:

  • Экземпляры объектов, созданные оператором new.
  • Массивы любых типов (включая массивы примитивов).
  • Объекты строк (String), если они не интернированы (не из пула строк).
  • Метаданные классов (Class metadata).

Пример:

// Все эти объекты размещаются в heap
MyClass obj = new MyClass(); // Экземпляр класса
int[] numbers = new int[100]; // Массив примитивов
String dynamicStr = new String("Hello"); // Строковый объект (не из пула)
List<String> list = new ArrayList<>(); // Коллекция и её элементы

Ключевые особенности heap:

  • Управляется сборщиком мусора (Garbage Collector, GC). Объекты удаляются, когда на них не остаётся ссылок.
  • Общая для всех потоков выполнения.
  • Размер настраивается параметрами JVM (-Xms, -Xmx).
  • Переполнение вызывает OutOfMemoryError.

Важно: В стеке (stack) хранятся только примитивные переменные и ссылки (указатели) на объекты в куче.