Рубрики
Без рубрики

Архитектура JVM в двух словах

Мы пишем код в нашей ИДЕЕ, Как он выполняется? Как это показывает результат, который мы хотим (не… С пометкой “Информатика”, explainlikeimfive, java, архитектура.

Мы пишем код в нашей ИДЕЕ, Как он выполняется? Как он показывает результат, который мы хотим (не всегда!)? Этот вопрос озадачил многих начинающих, а также некоторых программистов высокого уровня. Здесь я попытаюсь в какой-то степени ответить на эти вопросы применительно к JAVA.

Итак, это хорошо установленный факт, что вся грязная работа по компиляции и выполнению кода выполняется виртуальной машиной Java (JVM). Но из чего именно состоит JVM? Как он выполняет код?

Все, что мы пишем на IDEA, присутствует в исходном файле java (.java file). Затем он компилируется с помощью компилятора Java (командой javac). Создается файл класса java (.class file), который затем передается в подсистему загрузки классов.

Вся архитектура JVM выглядит следующим образом:

Подсистема загрузчика классов

Он принимает файл .class и выполняет с ним три операции:

Погрузка

Все основные классы Java API загружаются загрузчиком классов Bootstrap. Классы, присутствующие в папке расширения, такие как jdk и файлы jdk, загружаются загрузчиком классов расширений. Дальнейший загрузчик классов приложений загружает классы с уровня приложения и загружает их в classpath.

Связывающий

Здесь загружаемый файл класса подготавливается к выполнению. Операция проверки проверяет синтаксис. Статическим переменным выделяется память в блоке подготовки, также эти переменные инициализируются (Внимание: – здесь переменные инициализируются значениями по умолчанию). Кроме того, все символические ссылки заменяются исходными ссылками из области методов во время выполнения блока разрешения.

Инициализация

Наконец, статические переменные инициализируются с присвоением исходного значения, и все статические блоки выполняются. Для каждого файла и операций требуется область памяти во время выполнения. JVM предоставляет различные области данных во время выполнения.

Области данных среды выполнения

Область метода

Все файлы .class сбрасываются сюда. Он также содержит все статические переменные.

Площадь кучи

Он состоит из всех переменных экземпляра или объектных данных.

Область стека

Для каждого потока будет создан отдельный стек времени выполнения, который находится в области стека. И для каждого вызываемого метода в стеке будет сохранена одна запись, которая называется stack frame .

Каждый кадр стека состоит из 3 частей:

Массив локальных переменных:- Как следует из названия, здесь хранятся все локальные переменные метода и их значения.

Верхний конечный стек:- Эта область памяти используется для любой промежуточной операции внутри метода.

Данные фрейма:- Все символы, используемые в методе, хранятся здесь. Кроме того, если возникает какое-либо исключение, здесь сохраняется блок catch.

Регистры ПК

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

Наконец, область собственных методов содержит все инструкции собственных методов.

Здесь мы легко видим, что для каждого потока в области стека выделяется отдельный стек времени выполнения, что подразумевает, что область стека является потокобезопасной. В то время как для всей JVM будет только 1 область методов и область кучи, что подразумевает, что обе вышеупомянутые области не являются потокобезопасными.

Механизм выполнения

До сих пор классу выделялась память и он загружался. Всю грязную работу по выполнению кода выполняет этот движок. Так же, как и CPU, это выполняет программу построчно. Он также состоит из разных частей.

Переводчик

Он считывает, интерпретирует и выполняет код построчно.

JIT-компилятор

Он вступает в действие только тогда, когда есть многократно требуемые методы, а не для всех методов. Профилировщик выполняет работу по идентификации повторно требуемых методов или методов горячих точек .

Затем есть сборщик мусора, который собирает те переменные или методы, которые недоступны в коде, и освобождает память.

Наконец, существует собственный интерфейс метода или Java native interface (JNI), который просто предоставляет интерфейс для загрузки собственных библиотек методов во время выполнения. Итак, это то, что составляет JVM и их функции.

Надеюсь, это даст вам общее представление о том, какое колдовство происходит внутри машины!! Наслаждаться.

Оригинал: “https://dev.to/hrishi2710/jvm-architecture-in-a-nutshell-2jj1”