Что хранится в стеке

«Что хранится в стеке» — вопрос из категории Управление памятью, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Стек хранит примитивные типы данных (int, boolean, char и т.д.) и ссылки на объекты. Также в стеке хранятся вызовы методов (стек вызовов) — кадры стека (stack frames) с локальными переменными метода, параметрами и адресом возврата.

Пример:

void foo() {
    int x = 5; // хранится в стеке
    String s = "Hello"; // ссылка на объект в стеке, сам объект — в куче
    bar(x);
}

void bar(int y) {
    // y и другие локальные переменные — в стеке
}

Особенности:

  • Быстрый доступ, но ограниченный размер
  • Автоматическое управление памятью (освобождается при выходе из метода)
  • Потокобезопасен (у каждого потока свой стек)