Назад к вопросам
Senior
4
Heap и Stack: где что лежит, кто за что отвечает?
Компании, где спрашивали
SSP Soft
Ответ от нейросети
sobes.tech AI
В Java память делится на две основные области: Heap и Stack.
-
Heap (куча)
- Хранит объекты и массивы, созданные в процессе выполнения программы.
- Общая для всех потоков.
- Управляется сборщиком мусора (Garbage Collector).
- Размер может динамически изменяться.
-
Stack (стек)
- Хранит локальные переменные, параметры методов и адреса возврата.
- Каждый поток имеет свой собственный стек.
- Размер фиксирован и ограничен.
- Управляется автоматически: при вызове метода создаётся новый фрейм, при выходе — удаляется.
Пример:
public void example() {
int x = 10; // хранится в стеке
MyObject obj = new MyObject(); // obj (ссылка) в стеке, сам объект в куче
}
Здесь x — примитив, лежит в стеке, а obj — ссылка в стеке, указывающая на объект в куче.
Таким образом, стек отвечает за управление вызовами и локальными данными, а куча — за хранение объектов с динамическим временем жизни.