← Назад к вопросам

Как работает JVM?

2.3 Middle🔥 241 комментариев
#JVM и управление памятью

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Как работает JVM

Java Virtual Machine (JVM) — это виртуальная машина, которая исполняет байт-код Java на любой платформе, обеспечивая принцип «write once, run anywhere» (WORA). Это абстрактный слой между исходным кодом и операционной системой.

Основной цикл работы JVM

Процесс выполнения Java программы состоит из нескольких этапов:

public class Hello {
    public static void main(String[] args) {
        System.out.println("Hello, JVM!");
    }
}

Шаг 1 — Компиляция: Компилятор javac преобразует .java файл в .class файл (байт-код).

Шаг 2 — Загрузка: JVM запускается и загружает .class файл через ClassLoader:

public class ClassLoaderExample {
    // Bootstrap ClassLoader — загружает классы из JDK
    // Extension ClassLoader — загружает расширения
    // Application ClassLoader — загружает классы приложения
}

Шаг 3 — Верификация: Байт-код проверяется на безопасность и корректность:

  • Проверка типов данных
  • Проверка доступа к памяти
  • Проверка исключений

Шаг 4 — Исполнение: JVM интерпретирует или компилирует байт-код в машинный код (JIT компилятор).

Архитектура JVM

JVM состоит из нескольких ключевых компонентов:

1. Execution Engine (Исполняющая машина)

Отвечает за выполнение байт-кода. JVM имеет три режима исполнения:

  • Интерпретация — построчное выполнение байт-кода (медленнее)
  • JIT компиляция — компиляция в машинный код на лету (быстрее)
  • AOT компиляция — предварительная компиляция (GraalVM native-image)

2. Memory Areas (Области памяти)

Heap (Куча) — общая память для всех потоков:

String name = new String("John");  // Объект в Heap

Stack (Стек) — для каждого потока своя память:

int age = 25;  // Локальная переменная в Stack
String name = new String("John");  // Ссылка на Stack, объект в Heap

Method Area — информация о классах, методах, полях.

3. Garbage Collector (Сборщик мусора)

Автоматически удаляет неиспользуемые объекты:

Object obj = new Object();  // Объект создан в Heap
obj = null;                 // Объект становится недостижимым
// GC позже удалит этот объект

JIT компилятор и оптимизация

JVM отслеживает часто выполняемый код и компилирует его в машинный код. После JIT компиляции код выполняется на 100+ раз быстрее.

Основные ошибки

public class MemoryErrors {
    // OutOfMemoryError — недостаточно памяти
    List<Object> list = new ArrayList<>();
    
    // StackOverflowError — переполнение Stack (бесконечная рекурсия)
    private void recursion() {
        recursion();
    }
}

Понимание работы JVM критично для написания высокопроизводительного Java кода и диагностики проблем в production.

Как работает JVM? | PrepBro