Назад к вопросам
Junior
151
questionbank

Какие участки памяти в JVM вам известны?

Sobes Copilot

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

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

sobes.tech AI

В JVM существуют следующие основные участки памяти:

  • Heap (Куча):

    • Здесь хранятся объекты всех классов и массивы.
    • Управляется сборщиком мусора.
    • Делится на Generation (новые объекты), Old (старые объекты, пережившие несколько циклов GC) и Permanent Generation (до Java 8, хранил метаданные классов и статические переменные) или Metaspace (начиная с Java 8, хранит метаданные классов).
  • Stack (Стек):

    • Для каждого потока исполнения создается свой стек.
    • Здесь хранятся локальные переменные примитивных типов и ссылки на объекты.
    • Также хранит информацию о фреймах вызовов методов, включая параметры методов и возвращаемые значения.
    • Размер стека фиксирован или устанавливается при запуске JVM.
  • Method Area (Область методов):

    • До Java 8 являлась частью Permanent Generation.
    • Начиная с Java 8, метаданные классов хранятся в Metaspace (часто находится вне кучи).
    • Хранит структуру классов, константы (из пула констант), статические переменные и байткод методов.
  • PC Register (Счетчик программ):

    • Регистр, специфичный для каждого потока.
    • Содержит адрес инструкции виртуальной машины, которая выполняется в данный момент.
  • Native Method Stack (Стек нативных методов):

    • Для потоков, выполняющих нативные методы (написанные на других языках, например C/C++).
    • Управляется операционной системой, а не JVM.

Схематично можно представить так:

            +-------------------------+
            |          Heap           |
            +-------------------------+
            |  Generation (Young)     |
            |  Generation (Old)      |
            |  Metaspace (Java 8+)    |
            +-------------------------+
            |                         |
            |   Stack (per Thread)    |
            +-------------------------+
            |                         |
            |    PC Register (per Thread) |
            +-------------------------+
            |                         |
            | Native Method Stack (per Thread) |
            +-------------------------+