Что такое JVM?
Виртуальная машина Java (JVM) - это механизм, который обеспечивает среду выполнения для управления кодом Java или приложениями. Он преобразует байт-код Java в машинный язык. JVM является частью Java Run Environment (JRE). В других языках программирования компилятор создает машинный код для конкретной системы. Однако компилятор Java создает код для виртуальной машины, известной как виртуальная машина Java.
Вот как работает JVM
Во-первых, код Java преобразуется в байт-код. Этот байт-код интерпретируется на разных машинах.
Между хост-системой и исходным кодом Java байт-код является промежуточным языком.
JVM в Java отвечает за распределение памяти.
В этом руководстве по JVM вы узнаете:
- Архитектура JVM
- Процесс компиляции и выполнения программного кода
- Процесс компиляции и выполнения кода C
- Процесс компиляции и выполнения кода Java
- Почему Java является одновременно интерпретируемым и компилируемым языком?
- Почему Java медленная?
Архитектура JVM
Теперь в этом руководстве по JVM давайте разберемся с архитектурой JVM. Архитектура JVM в Java содержит загрузчик классов, область памяти, механизм выполнения и т. Д.1) ClassLoader
Загрузчик классов - это подсистема, используемая для загрузки файлов классов. Он выполняет три основные функции, а именно. Загрузка, связывание и инициализация.
2) Область метода
Область методов JVM хранит структуры классов, такие как метаданные, постоянный пул времени выполнения и код для методов.
3) Куча
Все объекты, связанные с ними переменные экземпляра и массивы хранятся в куче. Эта память является общей и разделяется между несколькими потоками.
4) Языковые стеки JVM
Стеки языка Java хранят локальные переменные и частичные результаты. Каждый поток имеет свой собственный стек JVM, создаваемый одновременно с созданием потока. Новый фрейм создается при каждом вызове метода и удаляется, когда процесс вызова метода завершен.
5) Регистры ПК
В регистре ПК хранится адрес инструкции виртуальной машины Java, которая выполняется в данный момент. В Java каждый поток имеет свой отдельный регистр ПК.
6) Собственные стеки методов
Стеки собственных методов содержат инструкции собственного кода, зависящие от собственной библиотеки. Он написан на другом языке вместо Java.
7) Механизм исполнения
Это тип программного обеспечения, используемого для тестирования оборудования, программного обеспечения или целых систем. Механизм выполнения теста никогда не несет никакой информации о тестируемом продукте.
8) Интерфейс собственного метода
Интерфейс собственных методов - это среда программирования. Он позволяет Java-коду, запущенному в JVM, вызывать библиотеки и собственные приложения.
9) Библиотеки собственных методов
Собственные библиотеки - это набор собственных библиотек (C, C ++), которые необходимы механизму выполнения.
Процесс компиляции и выполнения программного кода
Чтобы написать и запустить программу, вам понадобятся следующие
1) Редактор - для ввода вашей программы можно использовать блокнот.
2) Компилятор - для преобразования вашей высокоязычной программы в собственный машинный код.
3) Компоновщик - объединяет ссылки на различные программные файлы в основной программе вместе.
4) Загрузчик - для загрузки файлов с вашего вторичного запоминающего устройства, такого как жесткий диск, флэш-накопитель, компакт-диск, в оперативную память для выполнения. Загрузка выполняется автоматически, когда вы выполняете свой код.
5) Выполнение - Фактическое выполнение кода, которое обрабатывается вашей ОС и процессором.
Имея это в виду, обратитесь к следующему видео и изучите внутреннюю работу JVM и архитектуру JVM (виртуальная машина Java).
Нажмите здесь, если видео недоступно
Процесс компиляции и выполнения кода C
Чтобы понять процесс компиляции Java в Java. Давайте сначала кратко рассмотрим процесс компиляции и компоновки в C.
Предположим, что в основном вы вызвали две функции f1 и f2. Основная функция хранится в файле a1.c.
Функция f1 хранится в файле a2.c
Функция f2 хранится в файле a3.c.
Все эти файлы, то есть a1.c, a2.c и a3.c, передаются компилятору. Выходные данные - соответствующие объектные файлы, являющиеся машинным кодом.
Следующим шагом будет объединение всех этих объектных файлов в один файл .exe с помощью компоновщика. Компоновщик объединит все эти файлы вместе и создаст файл .exe.
Во время выполнения программы программа-загрузчик загружает файл .exe в оперативную память для выполнения.
Компиляция и выполнение кода Java в виртуальной машине Java
Теперь в этом руководстве по JVM давайте посмотрим на процесс для JAVA. В вашем основном у вас есть два метода f1 и f2.
- Основной метод хранится в файле a1.java.
- f1 хранится в файле как a2.java
- f2 хранится в файле как a3.java
Компилятор скомпилирует три файла и создаст 3 соответствующих файла .class, состоящих из кода BYTE. В отличие от C, связывание не выполняется .
Виртуальная машина Java или виртуальная машина Java находится в ОЗУ. Во время выполнения с помощью загрузчика классов файлы классов переносятся в ОЗУ. Код BYTE проверяется на наличие нарушений безопасности.
Затем механизм выполнения преобразует байт-код в собственный машинный код. Это как раз вовремя компиляции. Это одна из основных причин, почему Java работает сравнительно медленно.
ПРИМЕЧАНИЕ. JIT или JIT -компилятор является частью виртуальной машины Java (JVM). Он интерпретирует часть байтового кода, которая одновременно выполняет аналогичные функции.
Почему Java является одновременно интерпретируемым и компилируемым языком?
Языки программирования классифицируются как- Язык высшего уровня Ex. C ++, Java
- Языки среднего уровня Ex. C
- Низкоуровневый язык Ex Assembly
- наконец, самый низкий уровень машинного языка.
Компилятор это программа , которая преобразует программу с одного уровня языка на другой. Пример преобразования программы на C ++ в машинный код.
Компилятор java преобразует высокоуровневый код java в байт-код (который также является типом машинного кода).
Переводчик это программа , которая преобразует программу на одном уровне , на другом языке программирования , на том же уровне. Пример преобразования Java-программы в C ++
В Java генератор Just In Time Code преобразует байт-код в собственный машинный код, который находится на тех же уровнях программирования.
Следовательно, Java является как компилируемым, так и интерпретируемым языком.
Почему Java медленная?
Две основные причины медленной работы Java:
- Динамическое связывание: в отличие от C, связывание выполняется во время выполнения, каждый раз, когда программа запускается на Java.
- Интерпретатор времени выполнения: преобразование байтового кода в собственный машинный код выполняется во время выполнения в Java, что еще больше снижает скорость
Однако последняя версия Java в значительной степени устранила узкие места в производительности.
Резюме :
- Полная форма JVM - это виртуальная машина Java. JVM в Java - это движок, который управляет кодом Java. Он преобразует байт-код Java в машинный язык.
- Архитектура JVM в Java содержит загрузчик классов, область памяти, механизм выполнения и т. Д.
- В JVM код Java компилируется в байт-код. Этот байт-код интерпретируется на разных машинах.
- JIT расшифровывается как Just-in-time compiler. JIT является частью виртуальной машины Java (JVM). Используется для ускорения времени выполнения
- По сравнению с другими машинами-компиляторами, JVM в Java может работать медленнее.