Статьи

Архитектура JVM: Механизм выполнения в JVM

Привет читатели! В предыдущей статье серии JVM разработчики узнали о компонентах ClassLoader и Runtime Data Areas виртуальной машины. Это руководство поможет разработчикам правильно понять механизм выполнения в JVM.

1. Введение

Прежде чем двигаться дальше, давайте взглянем на виртуальную машину Java и ее основные характеристики.

1.1 Что такое виртуальная машина Java (JVM)?

Виртуальная машина Java (JVM) — это абстрактная виртуальная машина, которая находится на вашем компьютере и обеспечивает среду выполнения для выполнения байт-кода Java. JVM доступна для многих аппаратных и программных платформ, но немногие разработчики Java знают, что Java Runtime Environment (JRE) является реализацией виртуальной машины Java (JVM). JVM анализирует байт-код, интерпретирует его и выполняет тот же байт-код для отображения выходных данных.

Основная функция JVM — выполнять скомпилированные .class (т.е. байт-код) и генерировать вывод. Обратите внимание , что каждая операционная система имеет свою JVM, но сгенерированный вывод байт-кода одинаков во всех операционных системах. Это означает, что байт-код, сгенерированный в ОС Windows, также может работать в ОС Linux и наоборот, что делает Java независимым от платформы языком.

Рис. 1: Обзор виртуальной машины Java

Рис. 1: Обзор виртуальной машины Java

1.1.1 Что делает JVM?

Виртуальная машина Java выполняет следующие операции:

  • Загрузка требуемых файлов .class и jar
  • Присвоение ссылок и проверка кода
  • Исполнение кода
  • Предоставляет среду выполнения для байт-кода Java

1.1.2 Внутренняя архитектура JVM

На следующей диаграмме показаны ключевые внутренние компоненты виртуальной машины Java, соответствующие спецификации JVM.

Рис. 2: Архитектура виртуальной машины Java

Рис. 2: Архитектура виртуальной машины Java

Компонент механизма выполнения, показанный на фиг.2, поясняется ниже.

1.2 Исполнение движка в JVM

Этот компонент выполняет байт-код, который назначается областям данных времени выполнения через загрузчик классов. Этот байт-код читается как инструкция, и каждая инструкция байт-кода состоит из 1-байтового кода операции и операнда сложения. Обратите внимание , что байт-код Java написан в удобочитаемой форме, поэтому механизм выполнения должен изменить байт-код на язык, который может быть легко выполнен машиной в виртуальной машине Java. Механизм выполнения имеет три основных подкомпонента, т.е.

  • Интерпретатор : Этот компонент читает инструкции байт-кода и выполняет их последовательно. Компонент запускает приложение из командной строки, принимая аргумент имени файла. Следующая команда-прототип может быть использована:
    1
    java <_compiled_file_name_without_extension_>

    Помните , что скомпилированный класс (то есть файл .class ), загружаемый интерпретатором виртуальной машины, должен содержать метод main() который принимает форму ниже.

    1
    2
    3
    4
    5
    public static void main(String[] args) {
     
    // Sample code here
     
    }
  • JIT (Just In Time) компилятор : этот компонент уравновешивает недостаток интерпретатора в медленном исполнении и повышает производительность. JIT-компилятор компилирует аналогичную часть байт-кода одновременно и, таким образом, уменьшает общее время, необходимое для компиляции. Компилятор в этом компоненте ссылается на транслятор, который преобразует набор инструкций JVM в набор инструкций для конкретной ОС.
    • Oracle использует компилятор, известный как Hotspot Compiler, который ищет горячие точки, которые требуют компиляции с наивысшим приоритетом посредством профилирования, а затем компилирует горячую точку в собственный код. Здесь, если байт-код скомпилированного метода больше не требуется, виртуальная машина горячей точки удаляет собственный код из кэша и работает в режиме интерпретатора.
  • Сборка мусора : этот компонент является частью механизма выполнения, который освобождает память путем сбора и удаления объектов, на которые нет ссылок
Рис. 3: Механизм исполнения в JVM

Рис. 3: Механизм исполнения в JVM

1.3 Как скомпилировать и выполнить класс Java?

В этом разделе будет продемонстрирована компиляция и выполнение класса Java. Давайте разберем этот процесс с помощью примера фрагмента кода.

1.3.1 Создание файла Java

Откройте командную строку операционной системы, и мы будем использовать «блокнот» для создания простого класса Java. Следующая команда Java может быть использована.

1
> notepad _sample_file_name_with_extension_

Команда дает следующий вывод.

Рис. 4: Создание файла Java с помощью Блокнота

Рис. 4: Создание файла Java с помощью Блокнота

1.3.2 Написание примера кода Java

Как показано на рис. 4, команда откроет блокнот, и разработчики могут добавить пример кода в файл Welcome.java который отображает фиктивный вывод. Пример кода показан на рис. 5 и отобразит приветственное сообщение об успешном выполнении.

Рис. 5: Добавление примера кода

Рис. 5: Добавление примера кода

1.3.3 Компиляция Java-класса

После сохранения кода в файле Welcome.java разработчикам необходимо скомпилировать его. Эта компиляция создаст файл Welcome.class который, в свою очередь, создаст файл .class . Чтобы скомпилировать файл, можно использовать следующую команду Java.

1
> javac _Java_file_name_with_extension_

Команда дает следующий вывод.

Рис. 6: Компиляция файла

Рис. 6: Компиляция файла

1.3.4 Выполнение класса Java

Теперь разработчикам потребуется выполнить сгенерированный файл Welcome.class для отображения результатов. Чтобы выполнить файл, можно использовать следующую команду Java.

1
> java _Compiled_file_name_with_extension_

Команда дает следующий вывод.

Рис. 7: Выполнение файла

Рис. 7: Выполнение файла

1.4 JVM против JRE против JDK

Прежде чем мы продолжим и закончим этот урок, давайте взглянем на три важных ключевых слова 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.

Рис. 8: JVM против JRE против JDK.

Рис. 8: JVM против JRE против JDK.

Вот и все для этого поста. Счастливого обучения!

2. Вывод

В этом руководстве разработчики рассмотрели компонент механизма исполнения в JVM. Вы можете скачать образец кода в разделе « Загрузки ».

3. Загрузите исходный код

Это было обзорное руководство по механизму выполнения в виртуальной машине Java (JVM).