Sobes.tech
Назад к вопросам
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 — ссылка в стеке, указывающая на объект в куче.

Таким образом, стек отвечает за управление вызовами и локальными данными, а куча — за хранение объектов с динамическим временем жизни.