Ответ
В Heap хранятся все объекты, созданные через new, а также массивы. Сюда попадают:
- Объекты классов (экземпляры)
- Массивы (включая массивы примитивов)
- Строки (String)
- Коллекции (List, Map и т.д.)
Пример:
// Все эти объекты попадают в Heap
String str = new String("Hello");
List<Integer> list = new ArrayList<>();
int[] array = new int[10];
Особенности:
- Управляется Garbage Collector'ом
- Размер ограничен памятью устройства
- Доступ к объектам идет по ссылкам из Stack
Ответ 18+ 🔞
А, ну вот, классика жанра, ёпта! Смотри, чтобы не путаться, как последний распиздяй. Представь, что Heap — это такой огромный склад, куда ты сваливаешь всё, что создаёшь через это священное слово new. Типа, заказал новую тачку — она на парковку (в Heap) приехала. Ключи от неё (ссылка) — у тебя в кармане (в Stack).
Короче, сюда летит всё, что посерьёзнее примитивов:
- Объекты всяких классов — ну, новые экземпляры, ясен пень.
- Массивы — абсолютно любые, даже если там
intпростые лежат. - Строки (
String) — да-да, они тоже туда, не обманывайся. - Коллекции (
List,Mapи прочая хуйня) — само собой.
Вот, смотри на код, тут всё понятно как божий день:
// Всё это добро едет прямиком в Heap, будь здоров
String str = new String("Hello"); // Строка — объект, ёбана!
List<Integer> list = new ArrayList<>(); // Коллекция — объект, что тут непонятного?
int[] array = new int[10]; // Массив, даже из примитивов, — тоже объект, мудя!
А теперь фишки, которые надо запомнить, а то будешь потом как дурак:
- Управляется Garbage Collector'ом. Это как дворник-алкаш. Он просыпается, когда память кончается, и начинает мести всё, на что нет ключей (активных ссылок). Может твою любимую тачку утилизировать, если ты ключи потерял. Волнение ебать!
- Размер ограничен памятью устройства. Не резиновый этот склад. Если накидать овердохуища объектов — получишь
OutOfMemoryError, и программа накрывается медным тазом. Красота. - Доступ к объектам идёт по ссылкам из Stack. Это самое главное! Сам объект лежит в куче, а у тебя в стеке (в локальной переменной метода) — только бумажка с адресом, где этот объект искать. Потерял бумажку — считай, объект тебе больше не принадлежит, скоро дворник его приберёт.
Вот и вся магия. Не такой уж и пиздец, если разобраться. Главное — не создавай объекты как сумасшедший, а то Garbage Collector устанет и начнёт бухтеть, а память кончится.