Ответ
Стек хранит примитивные типы данных (int, boolean, char и т.д.) и ссылки на объекты. Также в стеке хранятся вызовы методов (стек вызовов) — кадры стека (stack frames) с локальными переменными метода, параметрами и адресом возврата.
Пример:
void foo() {
int x = 5; // хранится в стеке
String s = "Hello"; // ссылка на объект в стеке, сам объект — в куче
bar(x);
}
void bar(int y) {
// y и другие локальные переменные — в стеке
}
Особенности:
- Быстрый доступ, но ограниченный размер
- Автоматическое управление памятью (освобождается при выходе из метода)
- Потокобезопасен (у каждого потока свой стек)