> Что хранится в стеке и в куче в Java (Java)
Уровень: senior · Роль: backend · Категория: Технические вопросы
Компании: Eltex
Стек: Java
> Пример ответа
В Java память делится на две основные области: стек (Stack) и куча (Heap).
Стек (Stack) - это область памяти, работающая по принципу LIFO (последним пришёл - первым ушёл). В стеке хранятся:
-
Примитивные типы (int, double, boolean, char и т.д.) - их значения непосредственно.
-
Ссылки на объекты (адреса в куче).
-
Локальные переменные методов и параметры вызова.
-
Кадры стека (stack frames) для каждого вызова метода, включая адрес возврата.
Стек автоматически управляется JVM: при вызове метода создаётся новый кадр, при завершении - удаляется. Размер стека фиксирован (обычно 1 МБ на поток), и переполнение вызывает StackOverflowError.
Куча (Heap) - это область памяти для динамического выделения. В куче хранятся:
-
Все объекты (экземпляры классов, массивы, строки), созданные через
newили автоматически (например, строковые литералы в пуле строк). -
Поля объектов (включая примитивные типы, если они являются частью объекта).
-
Статические переменные (в некоторых реализациях JVM - в специальной области Metaspace, но исторически - в куче).
Куча управляется сборщиком мусора (Garbage Collector), который удаляет объекты, на которые нет активных ссылок. Размер кучи можно настраивать (например, -Xmx). Переполнение кучи вызывает OutOfMemoryError.
Пример для наглядности:
JAVApublic void example() {int a = 5; // a в стеке (примитив)String s = "hello"; // s - ссылка в стеке, объект "hello" в куче (пул строк)List<Integer> list = new ArrayList<>(); // list - ссылка в стеке, объект ArrayList в куче}
> Похожие задачи по backend
Что означает ключевое слово final и к каким сущностям оно применимо в Java
Для чего нужны дженерики в Java?
Что такое двухфазная фиксация в микросервисах
Что такое саги в микросервисах
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью