Привет читатели! В этом руководстве мы поймем и изучим виртуальную машину Java (JVM) и ее архитектуру. Этот урок поможет вам правильно ответить на следующие вопросы:
- Что такое JVM в Java?
- Различные компоненты JVM
- Разница между JVM, JRE и JDK
1. Введение
Виртуальная машина Java (JVM) — это абстрактная виртуальная машина, которая находится на вашем компьютере и предоставляет среду выполнения для выполнения байт-кода Java. JVM доступна для многих аппаратных и программных платформ, но немногие Java-разработчики знают, что Java Runtime Environment (JRE) — это виртуальная машина Java (JVM). JVM анализирует байт-код, интерпретирует его и выполняет тот же байт-код для отображения выходных данных.
Основная функция JVM — выполнять скомпилированные .class
(т.е. байт-код) и генерировать вывод. Обратите внимание , что каждая операционная система имеет свою JVM, но сгенерированный вывод байт-кода одинаков во всех операционных системах. Это означает, что байт-код, сгенерированный в ОС Windows, также может работать в ОС Linux и наоборот, что делает Java независимым от платформы языком.
1.1 Что делает JVM?
Виртуальная машина Java выполняет следующие операции:
-
- Загрузка необходимых файлов
.class
и jar - Присвоение ссылок и проверка кода
- Исполнение кода
- Предоставляет среду выполнения для байт-кода Java
- Вывоз мусора
- Загрузка необходимых файлов
1.2 Типы виртуальных машин Java
Редакция Java имеет две разные реализации виртуальной машины Java (JVM), т.е.
- Клиентская виртуальная машина Java Hotspot : это виртуальная машина по умолчанию в среде выполнения JDK 2.0, которая настроена для обеспечения максимальной производительности при запуске приложений в клиентской среде за счет сокращения времени запуска приложений и использования памяти.
- Виртуальная машина Java Hotspot Server : эта виртуальная машина предназначена для повышения скорости выполнения программ для запуска приложений в серверной среде. Эта виртуальная машина вызывается с помощью параметра командной строки сервера
1.3 Внутренняя архитектура JVM
На схеме показаны ключевые внутренние компоненты виртуальной машины Java, соответствующие спецификации JVM.
Компоненты, показанные на рис. 3, поясняются ниже.
1.3.1 Класс Loader
Подсистема загрузчика классов используется для загрузки / чтения файлов .class
и сохранения байт-кода в области метода JVM. Эта подсистема выполняет три основные функции, а именно:
- Загрузка : этот компонент обрабатывает загрузку классов
- Связывание : этот компонент проверит сгенерированный байт-код и назначит ссылки
- Инициализация : этот компонент назначит статические переменные с их исходными значениями и выполнит статические блоки
1.3.2 Области данных времени выполнения
Эта подсистема разделена на пять основных компонентов, т.е.
- Область метода : этот компонент содержит данные уровня класса каждого файла
.class
такие как метаданные, постоянный пул времени выполнения, статические переменные, код для методов и т. Д. В JVM имеется только одна область метода, которая используется всеми классами. - Область кучи : Этот компонент является частью памяти JVM, где хранятся все объекты и соответствующие им переменные экземпляра и массивы. Существует только одна область кучи и используется несколькими потоками, поскольку данные, хранящиеся в этой области, не являются поточно-ориентированными.
- Область стека : этот компонент снова является частью памяти JVM, где хранятся все временные переменные. Эта область имеет кадры стека и выделяет один кадр для каждого потока. Когда выполнение потока завершено, соответствующий кадр также уничтожается. Область стека является поточно-ориентированной, так как она не является общим ресурсом и разделена на три дочерних объекта, таких как:
- Массив локальных переменных
- Стек операндов
- Данные кадра
Эта область играет важную роль во время вызова метода и возврата.
- Регистры ПК (счетчик программ) : этот компонент содержит адрес инструкции JVM, которая в данный момент выполняется. Каждый поток в Java имеет свой собственный регистр ПК для хранения адреса выполняемой в данный момент инструкции
- Стеки собственного метода : этот компонент написан на другом языке и содержит информацию о собственном методе. Каждый поток в Java имеет отдельный стек собственных методов
1.3.3 Механизм исполнения
Этот компонент выполняет байт-код, который назначается областям данных времени выполнения и имеет три основных подкомпонента, а именно:
- Интерпретатор : этот компонент читает инструкции байт-кода и выполняет их последовательно
- JIT (Just-in-Time) компилятор : этот компонент уравновешивает недостаток интерпретатора в медленном исполнении и повышает производительность. JIT-компилятор компилирует аналогичную часть байт-кода одновременно и, таким образом, уменьшает общее время, необходимое для компиляции. Компилятор в этом компоненте ссылается на транслятор, который преобразует набор инструкций JVM в специфический для ОС набор инструкций.
- Сборка мусора : этот компонент является частью механизма выполнения, который освобождает память путем сбора и удаления объектов, на которые нет ссылок
1.3.4 Интерфейс собственного метода (JNI)
Этот компонент представляет собой среду программирования, которая позволяет коду Java вызываться или вызываться библиотеками и нативными приложениями (т.е. программами, специфичными для аппаратного обеспечения и ОС системы).
1.3.5. Собственные библиотеки методов
Этот компонент представляет собой набор собственных библиотек C, C ++, которые требуются для механизма исполнения.
1.4 JVM против JRE против JDK
JDK, JRE и JVM являются тремя важными ключевыми словами Java-программирования, и многим разработчикам не удается понять разницу между ними.
- Виртуальная машина Java (JVM) : JVM — это виртуальная машина, которая обеспечивает среду выполнения для выполнения байт-кода Java
- Java Runtime Environment (JRE) : JRE — это среда, в которой JVM работает и имеет библиотеки классов и другие файлы, которые виртуальная машина Java использует во время выполнения. Другими словами, JRE = виртуальная машина Java (JVM) + библиотеки для запуска приложения.
- Java Development Kit (JDK) : JDK является родительским набором JRE и содержит все, что JRE содержит вместе с инструментами разработки, такими как компилятор, отладчик и т. Д. Другими словами, JDK = Java Runtime Environment (JRE) + инструменты разработки
Вот графическое представление JVM, JRE и JDK.
1.5 Как скомпилировать и выполнить класс Java?
В этом разделе будет продемонстрирована компиляция и выполнение класса Java. Давайте разберем этот процесс с помощью примера фрагмента кода.
1.5.1 Создание файла Java
Откройте командную строку операционной системы, и мы будем использовать «блокнот» для создания простого класса Java. Следующая команда Java может быть использована.
1
|
> notepad _sample_file_name_with_extension_ |
Команда дает следующий вывод.
1.5.2 Написание примера кода Java
Как показано на рис. 6, команда откроет блокнот, и разработчики могут добавить пример кода в файл Welcome.java
который отображает фиктивный вывод. Пример кода показан на рис. 7 и отобразит приветственное сообщение об успешном выполнении.
1.5.3 Компиляция Java-класса
После сохранения кода в файле Welcome.java
разработчикам необходимо скомпилировать его. Эта компиляция создаст файл Welcome.class
который, в свою очередь, создаст файл .class
. Чтобы скомпилировать файл, можно использовать следующую команду Java.
1
|
> javac _Java_file_name_with_extension_ |
Команда дает следующий вывод.
1.5.4 Выполнение Java-класса
Теперь разработчикам потребуется выполнить сгенерированный файл Welcome.class
для отображения результатов. Чтобы выполнить файл, можно использовать следующую команду Java.
1
|
> java _Compiled_file_name_with_extension_ |
Команда дает следующий вывод.
Вот и все для этого поста. Счастливого обучения!
2. Вывод
В этом руководстве у нас был обзор виртуальной машины Java (JVM) и ее основных компонентов. Этот урок может быть обобщен как:
- JVM — это виртуальная машина, которая выполняет код Java и производит вывод путем преобразования байт-кода Java в машинный язык.
- JIT-компилятор является подкомпонентом JVM и используется для ускорения производительности и времени выполнения
- Java работает медленно из-за:
- Динамическое связывание
- Преобразование во время выполнения байт-кода в машинный код
Однако эти проблемы производительности узкого места в некоторой степени устранены в новых версиях Java Development Kit ( JDK ). Разработчики могут загрузить образец кода в разделе « Загрузки ».
3. Загрузите исходный код
Это было обзорное руководство по виртуальной машине Java (JVM) и ее основным компонентам.