Ответ
Heap (куча) — это область памяти JVM, в которой выделяется память под все объекты и массивы, создаваемые во время выполнения Java-приложения. Управление этой памятью осуществляется сборщиком мусора (Garbage Collector, GC).
Ключевые характеристики:
- Динамическое выделение: Память под объекты выделяется во время выполнения программы оператором
new. - Общее хранилище: Все потоки приложения используют общую кучу.
- Управление GC: Объекты, на которые больше нет ссылок, автоматически удаляются сборщиком мусора.
Структура кучи (упрощённо):
Молодая генерация (Young Generation)
├── Eden (здесь создаются новые объекты)
└── Survivor Spaces (S0, S1) – объекты, пережившие сборку мусора
Старая генерация (Old Generation/Tenured) – долгоживущие объекты
Metaspace (ранее PermGen) – метаданные классов (не является частью кучи в классическом понимании).
Пример и последствия:
// Объект создаётся в куче
MyObject obj = new MyObject();
// Переменная 'obj' хранит ссылку на объект в куче
Практическое значение:
- Утечки памяти возникают, когда объекты в куче больше не нужны, но на них остаются ссылки.
- Настройка производительности: Параметры JVM
-Xms(начальный размер) и-Xmx(максимальный размер) управляют размером кучи. OutOfMemoryErrorвозникает, когда куча переполнена и сборщик мусора не может освободить достаточно памяти.