Ответ
В стеке хранятся:
- Локальные переменные методов (примитивы и ссылки на объекты)
- Параметры методов
- Ссылки на объекты (сами объекты в куче)
- Вызовы методов (стэк вызовов)
Пример:
void foo() {
int x = 5; // хранится в стеке
String s = "Hello"; // ссылка в стеке, сам объект в куче
bar(x); // вызов метода добавляет фрейм в стек
}
void bar(int param) { // param в стеке
// ...
}
Особенности:
- Быстрый доступ (LIFO)
- Ограниченный размер (StackOverflowError)
- Автоматическое управление памятью
- Потокобезопасен (у каждого потока свой стек)