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

Виртуальная машина Java (JVM) — как работает JVM?

Когда код выполняется с помощью командной строки или командного терминала, создается экземпляр JVM.
Обязанности подсистемы Class Loader:

  • Загрузка
  • Связывание
  • Инициализация

При загрузке Class Loader загружает файлы .class и генерирует двоичный файл. Сгенерированный байт-код хранится в области класса. JVM хранит имя класса и имя своего родительского класса, будь то интерфейс, перечисление или класс, переменные, модификаторы и методы в области класса. После загрузки класса JVM создает объект для представления файла в куче памяти. Объект имеет тип Class, который предопределен в пакете java.lang. Программист может использовать объект класса для доступа к информации уровня класса.

При связывании интерфейс или класс объединяются в состоянии выполнения JVM, чтобы его можно было выполнить. Связывание выполняет проверку, подготовку и разрешение. Разрешение является необязательным. Во время проверки файл .class проверяется на наличие действительного байт-кода и правильного формата. В случае сбоя проверки генерируется исключение времени выполнения java.lang.VerifyError. После успешной проверки происходит подготовка, при которой память выделяется для переменных в классе и инициализируется память значениями по умолчанию. Процесс разрешения включает в себя определение конкретных значений из символических ссылок.

При инициализации метод выполняется для инициализации класса или интерфейса. Все статические переменные инициализируются с их определенными значениями. Этот процесс выполняется от родительского класса к дочернему классу и сверху вниз в классе.

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

Каждый поток имеет регистр ПК, в котором хранится адрес выполняемой в данный момент инструкции потока. Для хранения информации о собственных методах для каждого потока создается стек собственных методов. Механизм выполнения использует байт-код построчно и выполняет инструкции класса. Интерфейс собственного метода предоставляет интерфейс, который позволяет вызывать собственные библиотеки C/C++ с помощью JVM, которые могут зависеть от аппаратного обеспечения. Нативные библиотеки Java — это набор нативных библиотек, которые требуются механизму выполнения.

Первоначально опубликовано на www.imarslan.com 30 июня 2018 г.