Ответ
Heap (куча) — это область памяти JVM, в которой динамически выделяется память для всех объектов и массивов, создаваемых во время выполнения приложения.
Ключевые особенности:
- Управляется сборщиком мусора (Garbage Collector, GC).
- Общая для всех потоков приложения.
- Разделена на поколения для оптимизации работы GC:
- Young Generation (Молодое поколение): Сюда помещаются новые объекты. Состоит из Eden и двух Survivor пространств. Частые минорные сборки мусора (Minor GC).
- Old Generation (Старое поколение): Сюда перемещаются объекты, пережившие несколько циклов сборки в Young Generation. Сбор мусора здесь (Major GC) происходит реже, но занимает больше времени.
- Metaspace (до Java 8 — Permanent Generation): Хранит метаданные классов.
Пример и наблюдение:
// Создание объектов, которые попадают в heap
List<String> list = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
list.add("Object_" + i); // Каждая строка — новый объект в heap
}
// Когда ссылка `list` перестает быть достижимой,
// эти объекты становятся кандидатами на удаление сборщиком мусора.
Почему это важно: Понимание структуры Heap и работы GC критично для диагностики и предотвращения проблем с производительностью и утечками памяти (OutOfMemoryError).