Очищает ли сборщик мусора (Garbage Collector) память стека в Java?

«Очищает ли сборщик мусора (Garbage Collector) память стека в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет. Сборщик мусора (GC) в Java работает исключительно с кучей (heap), управляя памятью для объектов. Память стека (stack) очищается автоматически средой выполнения (JVM) при завершении выполнения метода, когда его фрейм удаляется.

Почему?

  • Стек содержит примитивные типы и ссылки на объекты, время жизни которых строго привязано к области видимости метода (LIFO). Его очистка — детерминированный и быстрый процесс.
  • Куча хранит объекты с динамическим временем жизни. GC отслеживает и удаляет объекты, на которые больше нет достижимых ссылок из стека или других активных объектов.

Пример:

void exampleMethod() {
    int stackVar = 42;          // Примитив в стеке
    Object heapObj = new Object(); // Объект в куче, ссылка в стеке
} // Конец метода
// Фрейм стека для exampleMethod удаляется, память для stackVar и ссылки heapObj освобождается.
// Сам объект Object в куче станет кандидатом на сборку мусора, если на него больше нет ссылок.

Таким образом, GC не участвует в управлении стеком.