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