Что такое виртуальная машина Java?

Java Virtual Machine (JVM) - это спецификация, предоставляющая среду выполнения, в которой может быть запущен Java-байт-код. Как следует из названия, JVM действует как «виртуальный» механизм или процессор. Независимость платформы Java состоит в основном из ее виртуальной машины Java (JVM). JVM делает это возможным, поскольку он знает конкретные длины команд и другие особенности платформы. JVM выполняет следующую операцию:

  1. Загружает код
  2. Проверяет код
  3. Выполняет код

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

Ответственность JVM позволяет использовать один и тот же файл класса для любых других операционных систем. JVM берет ваш скомпилированный нейтральный байт-код и интерпретирует его для запуска машинного кода на платформе. Он также может скомпилировать его в собственный код с помощью JIT (а компилятор точно в срок , который компилирует и кэширует ваш код, как правило, по одному методу за раз). Таким образом, он находится в JVM, где ваш код, если необходимо, выводится в собственных вызовах операционной системы. Поэтому в JVM ваш нейтральный по отношению к платформе код потоковой передачи превращается в кодовый код, специфичный для платформы.

Архитектура JVM

Каждое приложение Java запускается внутри экземпляра среды выполнения конкретной реализации абстрактной спецификации виртуальной машины Java. Существует три понятия JVM: спецификация, реализация и экземпляр.

  1. Спецификация: документ, который описывает, что требуется для реализации JVM.
  2. Реализация: Известна как JRE (Java Run Time Environment.)
  3. Экземпляры: всякий раз, когда вы запускаете файл класса Java, создается экземпляр JVM.
  1. Подсистема загрузчика классов
  2. Область данных времени выполнения
  3. Механизм выполнения

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

Подсистема загрузчика классов Java загружает, связывает и инициализирует файл класса, когда он впервые ссылается на класс во время выполнения. Он отвечает за загрузку файлов классов из файловой системы, сети или любого другого источника. В загрузчике классов Java, Bootstrap, Extension и System или Application используется три загрузчика класса по умолчанию.

Загрузочный загрузчик класса

Когда запускается JVM, запускается специальный кусок машинного кода, который загружает загрузчик системных классов. Этот машинный код известен как загрузочный загрузчик Bootstrap / Primordial. Это машинные инструкции, специфичные для платформы, которые запускают весь процесс загрузки классов. Загрузочный загрузчик bootstrap также выполняет загрузку всего кода, необходимого для поддержки базового Java Runtime Environment (JRE), включая классы в Java.util и Java.lang.

Extension ClassLoader

Загрузчик класса Extension загружает классы из каталогов расширений JRE, таких как каталоги lib / ext. Extension ClassLoader делегирует запрос на загрузку класса для своего родителя, Bootstrap и, если он неудачен, загружает каталог классов jre / lib / ext или любой другой каталог, указанный системным свойством Java.ext.dirs. Расширение ClassLoader в JVM реализуется sun.misc.Launcher $ ExtClassLoader.

Загрузчик класса System / Application

System / Application Class Loader отвечает за загрузку класса Application Class, путь, указанный в переменной среды и т. Д.

Classloader - Связывание

Связывание - это процесс включения загруженных байт-кодов в Java Runtime System, чтобы загруженный тип мог использоваться JVM. Это включает в себя проверку и подготовку этого класса или интерфейса, его прямого суперкласса, его прямых суперинтерфейсов и его типа элемента (если это тип массива), если это необходимо.

Связывание - это процесс включения загруженных байт-кодов в Java Runtime System, чтобы загруженный тип мог использоваться JVM. Это включает в себя проверку и подготовку этого класса или интерфейса, его прямого суперкласса, его прямых суперинтерфейсов и его типа элемента (если это тип массива), если это необходимо....

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

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

Виртуальная машина Java (JVM) определяет различные области данных во время выполнения, которые используются во время выполнения программы. Некоторые из этих областей данных создаются при запуске Java Virtual Machine и уничтожаются только при выходе из виртуальной машины Java. Другие области данных относятся к каждой теме. Области данных в потоке создаются, когда поток создается и уничтожается при выходе потока.

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

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

Область кучи

Heap - это память, где объекты и их переменная экземпляра сохраняется. Каждый раз, когда объект создается в Java, он переходит в область памяти, известную как куча.

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

Стек - это место памяти, где хранятся методы и локальные переменные. Переменные ссылки (примитивные или объектные ссылки) хранятся в папке

PC Register

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

Пакет Native Method

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

Двигатель выполнения

Это ядро JVM. Механизм выполнения может связываться с различными областями памяти JVM. Каждый поток запущенного приложения Java представляет собой отдельный экземпляр механизма выполнения виртуальной машины. Байт-код, назначенный областям данных времени выполнения в JVM через загрузчик классов, выполняется механизмом выполнения.

  1. Интерпретатор
  2. Компилятор JIT
  3. Сборщик мусора

Интерпретатор

Считывает, интерпретирует и выполняет инструкции байтового кода один за другим. Поскольку он интерпретирует и выполняет инструкции один за другим, он может быстро интерпретировать один байт-код, но медленно выполняет интерпретируемый результат. Это недостаток языка интерпретации. «Язык», называемый Bytecode, в основном работает как интерпретатор.

Компилятор JIT

Компилятор JIT преобразует байт-код в выражение промежуточного уровня IR (промежуточное представление) для выполнения оптимизации, а затем преобразует выражение в собственный код. Компилятор JIT был введен для компенсации недостатков интерпретатора. Основная цель JIT-компилятора - улучшить производительность. Внутренний JIT-компилятор поддерживает отдельный счетчик для каждого метода. Всякий раз, когда JVM через любой вызов метода, сначала этот метод будет интерпретироваться обычно интерпретатором, а компилятор JIT увеличивает соответствующую переменную счетчика.

Сборщик мусора

Сбор мусора (GC) - это процесс, который направлен на освобождение занятой памяти, на которую больше не ссылается какой-либо доступный объект Java, и является неотъемлемой частью системы управления динамической памятью виртуальной машины Java (JVM). Все объекты Java автоматически захватывают память, которая им нужна, когда они созданы, а когда объект больше не нужен, процесс сборки Java Garbage Collection восстанавливает память. Это означает, что сборщик мусора отслеживал живые объекты и все остальное обозначенное мусором.

Собственные методы позволяют использовать код из других языков, таких как C или C ++, в вашем Java-коде. Вы используете их, когда Java не предоставляет необходимые вам функциональные возможности.

Библиотеки родных методов

Нативные библиотеки методов - это сборник собственных библиотек, который требуется для механизма выполнения.

Источник: http://net-informations.com/Java/intro/jvm.htm

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *