Какие данные хранятся в Stack

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

Ответ

В стеке хранятся:

  • Локальные переменные методов (примитивы и ссылки на объекты)
  • Параметры методов
  • Ссылки на объекты (сами объекты в куче)
  • Вызовы методов (стэк вызовов)

Пример:

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

void bar(int param) { // param в стеке
    // ...
}

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

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