Введение в виртуальную машину Java
В этой статье мы узнаем о виртуальной машине Java, также известной как JVM. Виртуальная машина Java - это виртуальная машина, которая позволяет компьютерной системе запускать / выполнять Java-программы. По сути, JVM - это движок, который работает как среда выполнения для Java-кода. JVM преобразует код Java в машинный язык. Когда вы запускаете скомпилированный файл .class, он отправляется в JVM, а затем JVM возвращает выходные данные. Виртуальная машина Java является частью JRE, что означает «среда выполнения Java». Основные задачи для виртуальной машины Java состоят из загрузки кода, проверки кода и выполнения кода. Также предоставьте среду выполнения для выполнения кода. JVM состоит из различных компонентов, таких как Classloader, Список пространства, назначенного JVM, например, Stack, Execution Engine и нескольких собственных библиотек.
Архитектура виртуальной машины Java 
Как показано на рисунке выше, архитектура виртуальной машины Java состоит из различных компонентов. Давайте узнаем о каждом конкретном компоненте в отдельности.
погрузчик
Как следует из названия, это компонент, отвечающий за загрузку файлов классов. Загрузка, связывание и инициализация файла класса являются основными функциями загрузчика. Загрузчик работает во время выполнения.
- Загрузка: в основном загрузчик читает файл .class, затем генерирует двоичный код и сохраняет его в области метода. Загрузчик классов, загрузчик расширений и загрузчик классов приложений - это различные загрузчики классов, отвечающие за загрузку различных классов.
- Связывание: три основные функции, такие как проверка, подготовка и разрешение. Все начинается с проверки файла .class. Если проверка не удалась, это дает исключение проверки во время выполнения. Позже, память выделяется для переменных со значениями по умолчанию. Затем, наконец, символические ссылки на память заменяются на прямые ссылки из области памяти.
- Инициализация: это последняя часть ClassLoader. Исходные значения присваиваются всем статическим переменным, после чего выполняется статический блок. Эта часть выполняется сверху вниз по классу.
отвал
Подробности об объекте и переменных экземпляра хранятся здесь. Это область общей памяти, что означает, что хранящиеся здесь данные не являются поточно-ориентированными.
Исключение в потоке «main» java.lang.OutOfMemoryError: пространство кучи Java
Одной из наиболее вероятных ошибок является исключение «OutOfMemoryError », которое означает, что JVM не может выделить объект в области кучи или невозможно выделить память для того же объекта.
стек
Это где отдельный стек времени выполнения создается для каждого нового потока. Также известный как стек времени выполнения, каждый раз, когда вызывается метод, все детали сохраняются в соответствующем стенде времени выполнения, и после завершения метода эти детали удаляются из стека.
ПК Регистры
Для каждого отдельного потока создается отдельный регистр ПК (счетчик программ), в котором хранится адрес текущей инструкции выполнения, который позже будет обновлен следующей инструкцией. Эта область памяти довольно мала и имеет фиксированный размер.
Родной Метод Стек
Это одна из областей своего вида памяти, которая вызывается потоком, а затем поток находится на совершенно новом уровне, где ограничения структуры и безопасности, подразумеваемые виртуальной машиной Java, больше не используются. По сравнению с другими областями памяти времени выполнения память, занятая стеками собственных методов, не имеет фиксированного размера, без ограничений на приращение или уменьшение.
Собственный интерфейс Java
JNI просто взаимодействует с нижеупомянутыми библиотеками Native Method, которые имеют реализацию C, C ++ и предоставляют то же самое для механизма исполнения. Прямой доступ к ассемблерному коду разрешен JNI. Для JVM Java и Native - это два типа кодов. JNI плавно устанавливает четкую связь между этими двумя.
Библиотеки нативных методов
Коллекция собственных библиотек, как того требует механизм выполнения.
Двигатель исполнения
Что ж, теперь у нас есть Java-программа в байт-код, которая назначается вышеописанным областям данных через загрузчик классов, и теперь байт-код будет выполняться механизмом исполнения. Механизм выполнения просто читает байт-код в единицах, как машинное чтение строк кода одна за другой. Байт-код является читаемым человеком форматом, поэтому машина не может его прочитать, и он должен быть преобразован в машиночитаемый формат, где для интерпретации используются следующие компоненты.
Механизм выполнения состоит из трех основных компонентов: интерпретатора, JIT-компилятора и сборщика мусора.
1. переводчик
Проще говоря, выполняет байт-код в последовательном методе. Вызов сделан запросом командной строки с скомпилированным файлом в качестве аргумента. Интерпретатор довольно быстро интерпретирует и выполняет команды одну за другой, что происходит быстрее, чем JIT-компилятор для компиляции кода.
имя класса Java
Класс main () должен находиться в скомпилированном файле .class.
2. JIT-компилятор
Один из наиболее важных компонентов среды выполнения Java, который повышает производительность приложения Java во время выполнения. Ни один другой компонент не оказывает такого влияния на производительность, как JIT-компилятор. Это компилятор по умолчанию и активируется при вызове любого метода Java.
3. Сборщик мусора
Как следует из названия, он как-то связан с мусором, сборщик мусора просто ищет все возможные объекты, доступные в пространстве кучи JVM, проверяет, используется ли он, а затем удаляет неиспользуемые объекты. Таким образом, он просто отмечает части памяти, которые используются или нет. Затем он продолжает подметать, где просто удаляет помеченный объект. В лучшем случае не требуется никакой системы выделения памяти вручную, поскольку сборщик мусора выполняет работу по автоматическому удалению неиспользуемого пространства памяти. Но, поскольку это автоматическая задача, ни один программист не имеет контроля над планированием какого-либо временного интервала для конкретной задачи очистки и не требует большей мощности процессора при поиске ссылок на объекты.
Вывод
Хотя не обязательно иметь четкое представление о том, как работает JVM, для целей написания кода Java это очень полезно. Для разработчика, который понимает работу JVM, он напишет лучший и оптимизированный код, каким бы длинным или сложным это ни было требование. Помимо приведенного здесь описания, JVM предоставляет широкий спектр функций и технологий. Эти функции могут быть использованы для повышения производительности в соответствии с требованиями конкретного поставщика
Рекомендуемые статьи
Это руководство по виртуальной машине Java. Здесь мы обсуждаем архитектуру виртуальной машины Java вместе с ее различными компонентами. Вы также можете посмотреть следующие статьи, чтобы узнать больше -
- Пузырьковая сортировка в JavaScript
- Жизненный цикл потока в Java
- Что такое Java SE?
- Лучшие компиляторы Java
- JRE против JVM | Топ 8 отличий с (Инфографика)