Нужен ли Garbage Collector для очистки стека (stack) в Java?

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

Ответ

Нет, Garbage Collector (GC) не очищает стек.

Причина: Стек и куча (heap) управляются по-разному.

  • Стек: Хранит примитивные типы и ссылки на объекты. Очищается автоматически и мгновенно при выходе из метода (когда стековый кадр удаляется).
  • Куча: Хранит сами объекты. Очищается Garbage Collector'ом, который удаляет объекты, ставшие недостижимыми (на которые больше нет ссылок).

Пример, иллюстрирующий разницу:

public void exampleMethod() {
    int localPrimitive = 42;          // Хранится в стеке.
    MyObject objRef = new MyObject(); // Ссылка `objRef` — в стеке, сам объект MyObject — в куче.
} // Конец метода
// 1. Стековый кадр для `exampleMethod` удаляется: `localPrimitive` и ссылка `objRef` исчезают.
// 2. Объект MyObject в куче теперь может быть удален GC (если на него нет других ссылок).

Таким образом, GC работает только с областью кучи, освобождая память от неиспользуемых объектов.