Назад к вопросам
Middle+
475
questionbank

Как устроена память в JVM?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Память JVM разделена на следующие области данных:

  • Heap (Куча): Область памяти, где хранятся объекты классов и массивы. Является общей для всех потоков. Управляется сборщиком мусора. Состоит из поколений (Young, Old, Permanent/Metaspace).
  • Stack (Стек): Область памяти для каждого потока JVM. Хранит локальные переменные, параметры методов и информацию о кадре стека для каждого вызова метода. При завершении метода его кадр удаляется со стека.
  • Method Area (Область методов): Хранит метаданные классов: байт-код методов, константы пула, статические переменные. В более старых версиях JVM называлась Permanent Generation, в новых (Java 8+) заменена на Metaspace.
  • PC Registers (Счетчики команд): Для каждого потока JVM. Хранит адрес следующей инструкции JVM, подлежащей выполнению.
  • Native Method Stacks (Стеки нативных методов): Хранят вызовы нативных (не-Java) методов. Используют те нативные библиотеки, которые вызывает приложение.

За распределение памяти в Heap отвечает сборщик мусора (Garbage Collector). Он автоматически освобождает память от объектов, на которые нет активных ссылок.

Пример работы с Heap и Stack:

// Объект 'obj' создается в Heap.
Object obj = new Object();

// Локальная переменная 'i' хранится в Stack потока.
int i = 10;

public void myMethod(int param) { // Параметр param в Stack этого фрейма метода.
    // Локальная переменная 'local' в Stack этого фрейма метода.
    String local = "hello";
    // Новый объект создается в Heap. Ссылка на него в Stack этого фрейма метода.
    MyClass myObj = new MyClass();
}

Разница между Heap и Stack:

  • Heap: Общая для всех потоков, хранит объекты, управляется GC.
  • Stack: Принадлежит отдельному потоку, хранит примитивы и ссылки на объекты, управляется фреймами методов.

Управление памятью в JVM включает:

  • Распределение (Allocation) памяти при создании объектов.
  • Освобождение (Deallocation) памяти неиспользуемых объектов (сборка мусора).
  • Оптимизация использования памяти.