Sobes.tech
Junior
95
questionbank

В чем разница между Stack и Heap?

Answer from AI

sobes.tech AI

Stack и Heap — это две области памяти, используемые Java Virtual Machine (JVM) для хранения данных.

Главные отличия:

Характеристика Stack Heap
Назначение Хранение примитивных типов данных и ссылок на объекты Хранение объектов
Размер Фиксированный для каждого треда Динамический, делится всеми тредами
Управление LIFO (Last-In, First-Out), управляется самостоятельно JVM Garbage Collector (сборщик мусора)
Скорость Быстрее Медленнее
Поток Принадлежит конкретному треду Разделяется всеми тредами
Жизненный цикл Связан с жизненным циклом метода Определяется Reachability (достижимостью)

Пример использования:

// Примитивный тип данных, хранится в Stack
int count = 10;

// Объект, хранится в Heap
String name = new String("Java");

// Ссылка на объект name, хранится в Stack
String anotherName = name;

Stack:

  • Переменные примитивных типов (int, boolean, float и т.д.) хранят свои значения непосредственно в Stack.
  • Ссылки на объекты (например, name и anotherName в примере) хранят в Stack адрес, по которому находится сам объект в Heap.
  • Размер Stack жестко задан для каждого потока выполнения. Переполнение Stack (StackOverflowError) происходит при слишком глубокой рекурсии или создании большого количества локальных переменных.
  • Доступ к данным в Stack организован по принципу LIFO. Когда метод завершает выполнение, его данные автоматически удаляются из Stack.

Heap:

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