Что такое куча (heap) в Java?

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

Ответ

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

Ключевые характеристики:

  • Общая для всех потоков приложения.
  • Разделена на поколения (generations) для оптимизации работы GC:
    • Young Generation (Eden + Survivor spaces) — для новых объектов.
    • Old (Tenured) Generation — для долгоживущих объектов.
    • Metaspace (ранее Permanent Generation) — для метаданных классов.
  • Размер кучи задается JVM-параметрами:
    • -Xms — начальный размер.
    • -Xmx — максимальный размер.

Пример создания объекта в куче:

// Объект 'obj' создается и размещается в куче
Object obj = new Object();

Когда ссылка obj перестает быть достижимой, GC может освободить занимаемую объектом память.