Sobes.tech
Back to questions
Senior
4

Как устроена память в Java (JVM)? Какие есть области: стек, хип?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Память в JVM делится на несколько ключевых областей:

  • Heap (куча) — область для хранения объектов и массивов. Все объекты, создаваемые через new, размещаются в куче. Heap управляется сборщиком мусора (Garbage Collector), который освобождает память от неиспользуемых объектов.

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

  • Метаспейс (Metaspace) — область для хранения метаданных классов, загруженных JVM, включая информацию о методах, полях и т.д. В более старых версиях JVM это была PermGen.

  • Регистры и другие внутренние области — для работы JVM, но они менее заметны разработчику.

Пример:

public void example() {
    int a = 10; // хранится в стеке
    Object obj = new Object(); // объект в куче, ссылка в стеке
}

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