Что больше по размеру в Java: стек (Stack) или куча (Heap)?

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

Ответ

Куча (Heap) обычно значительно больше стека (Stack). Их размеры настраиваются отдельно и служат разным целям.

Стек (Stack) — это область памяти для:

  • Локальных примитивов и ссылок на объекты.
  • Вызовов методов и хранения фреймов.
  • Размер ограничен и мал (например, 1 МБ по умолчанию в HotSpot JVM). Переполнение вызывает StackOverflowError.

Куча (Heap) — это динамическая память для:

  • Всех объектов, созданных с помощью new.
  • Размер настраивается и может быть очень большим (гигабайты). Нехватка памяти вызывает OutOfMemoryError.

Почему куча больше? В ней размещаются все данные приложения, тогда как стек содержит только активные вызовы методов текущих потоков.

Пример настройки размеров при запуске JVM:

# Увеличение стека до 2 МБ и максимальной кучи до 1 ГБ
java -Xss2m -Xmx1024m MyApplication