Ответ
Heap (куча) — это область оперативной памяти (RAM), выделяемая JVM для динамического хранения всех объектов и массивов, создаваемых во время выполнения Java-приложения.
Ключевые характеристики:
- Динамическое выделение: Память под объекты выделяется во время выполнения оператором
new. - Сборка мусора (Garbage Collection, GC): Управление памятью автоматическое. Объекты, на которые нет ссылок, удаляются GC.
- Разделение на поколения: Оптимизирует работу GC.
- Young Generation (Eden, Survivor Spaces): Для недолгоживущих объектов.
- Old Generation (Tenured): Для долгоживущих объектов.
- Общая для всех потоков: Все потоки приложения разделяют одну кучу.
Пример и визуализация:
// Объект 'myObject' создается в куче (Heap)
MyClass myObject = new MyClass();
// Ссылка 'myObject' хранится в стеке (Stack), а сам объект — в куче.
Управление размером Heap (JVM флаги):
-Xms— начальный размер кучи (например,-Xms256m).-Xmx— максимальный размер кучи (например,-Xmx2g).
Ошибки: OutOfMemoryError: Java heap space возникает, когда приложение исчерпывает выделенную кучу и GC не может освободить достаточно памяти.
Важно: Помимо кучи, JVM использует другие области памяти: Stack (для примитивов и ссылок на объекты в рамках вызовов методов), Metaspace (для метаданных классов), Native Memory.