JVM (Java Virtual Machine) — это виртуальная машина, которая выполняет программы, написанные на языке Java, а также другие языки платформы Java, такие как Kotlin и Scala. Её основная задача — выполнение [[Java байт-код|байт-кода]], промежуточного представления между исходным кодом и машинным кодом конкретного устройства. JVM также управляет памятью, сборкой мусора, безопасностью и многопоточностью, создавая надёжную среду для выполнения приложений.
**Основные функции JVM**
- **Платформонезависимость**. Java-программы компилируются в байт-код, который может выполняться на любой системе с установленной JVM, что позволяет запускать один и тот же код на различных операционных системах и аппаратных платформах без изменений.
- **Управление памятью**. JVM управляет памятью через кучу (heap), автоматически выделяя и освобождая память, что устраняет необходимость ручного управления и снижает риск утечек.
- [[gc/Garbage Collector|Сборка мусора]] (Garbage Collection). JVM использует сборщик мусора для автоматического освобождения памяти, занятой объектами, которые больше не используются. Это предотвращает утечки памяти и улучшает производительность приложения.
- **Безопасность**. JVM обеспечивает безопасное выполнение кода с помощью системы управления доступом, проверяющей разрешения для выполнения определённых операций, таких как доступ к файловой системе, что помогает предотвратить выполнение вредоносного кода.
- **Многопоточность**. JVM поддерживает [[../fundamental/Multithreading|многопоточность]], позволяя разрабатывать многопоточные приложения на уровне языка. Она управляет созданием, синхронизацией и выполнением потоков.
- **Управление исключениями**. JVM предоставляет механизм обработки исключений, который позволяет программам Java надёжно обрабатывать ошибки во время выполнения, повышая стабильность и устойчивость приложений.
**Как работает JVM**
1.**Компиляция исходного кода в байт-код**
Исходный код (.java файлы) компилируется компилятором Java (javac) в байт-код (.class файлы), который является платформонезависимым промежуточным представлением.
2.**Загрузка байт-кода**
Класс-загрузчики JVM (Class Loaders) загружают байт-код в память. Существуют различные типы загрузчиков, такие как Bootstrap Class Loader, Extension Class Loader и Application Class Loader.
3.**Проверка байт-кода**
JVM проверяет байт-код для обеспечения его корректности и безопасности, чтобы предотвратить выполнение некорректного или вредоносного кода.
4.**Интерпретация или компиляция JIT**
JVM может интерпретировать байт-код или использовать Just-In-Time (JIT) компиляцию, которая преобразует байт-код в машинный код во время выполнения, улучшая производительность.
5.**Выполнение кода**
После загрузки и проверки байт-кода JVM выполняет его, управляя памятью, потоками и исключениями, обеспечивая надёжное выполнение программы.