Ответ
Куча (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) хранятся только примитивные переменные и ссылки (указатели) на объекты в куче.