Статьи

Архитектура JVM: обзор архитектуры JVM и JVM

Привет читатели! В этом руководстве мы поймем и изучим виртуальную машину 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: Обзор виртуальной машины Java

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

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

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

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

Рис. 2: компоненты JVM

1.2 Типы виртуальных машин Java

Редакция Java имеет две разные реализации виртуальной машины Java (JVM), т.е.

  • Клиентская виртуальная машина Java Hotspot : это виртуальная машина по умолчанию в среде выполнения JDK 2.0, которая настроена для обеспечения максимальной производительности при запуске приложений в клиентской среде за счет сокращения времени запуска приложений и использования памяти.
  • Виртуальная машина Java Hotspot Server : эта виртуальная машина предназначена для повышения скорости выполнения программ для запуска приложений в серверной среде. Эта виртуальная машина вызывается с помощью параметра командной строки сервера

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

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

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

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

Компоненты, показанные на рис. 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 в специфический для ОС набор инструкций.
  • Сборка мусора : этот компонент является частью механизма выполнения, который освобождает память путем сбора и удаления объектов, на которые нет ссылок
Рис. 4: Механизм исполнения в JVM

Рис. 4: Механизм исполнения в 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.

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

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

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

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

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

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

1
> notepad _sample_file_name_with_extension_

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

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

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

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

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

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

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

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

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

1
> javac _Java_file_name_with_extension_

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

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

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

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

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

1
> java _Compiled_file_name_with_extension_

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

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

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

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

2. Вывод

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

  • JVM — это виртуальная машина, которая выполняет код Java и производит вывод путем преобразования байт-кода Java в машинный язык.
  • JIT-компилятор является подкомпонентом JVM и используется для ускорения производительности и времени выполнения
  • Java работает медленно из-за:
    • Динамическое связывание
    • Преобразование во время выполнения байт-кода в машинный код

Однако эти проблемы производительности узкого места в некоторой степени устранены в новых версиях Java Development Kit ( JDK ). Разработчики могут загрузить образец кода в разделе « Загрузки ».

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

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