Разница между JIT и JVM в Java

Опубликовано: 15 Сентября, 2022

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

Тот факт, что JVM выполняет программу Java, также помогает сделать ее стабильной. Поскольку отвечает JVM, выполнение программы контролируется ею. Следовательно, JVM может создать ограниченную область выполнения, называемую песочницей, которая содержит программное обеспечение, предотвращая неограниченный доступ системы. Защита также улучшена за счет некоторых существующих ограничений языка Java. Архитектура Java JVM включает в себя загрузчик классов, механизм выполнения, поле памяти и т. д.

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

  • ClassLoader : загрузчик классов предназначен для загрузки файлов классов. Он помогает выполнять три основные функции: загрузка, инициализация и связывание.
  • Стеки языка JVM : в памяти Java хранятся локальные переменные и частичные результаты вычислений. Каждый поток имеет свой собственный стек JVM, создаваемый при создании потока. При вызове метода создается новый фрейм, а затем удаляется.
  • Область методов. Область методов JVM специализируется на хранении метаданных и файлов кода программной части для приложений Java.
  • Регистры ПК: Адрес исполняемой в данный момент инструкции виртуальной машины Java сохраняется в регистрах ПК. Каждый поток в Java имеет свой отдельный регистр ПК.
  • Куча: в куче сохраняются все объекты, массивы и переменные экземпляра. Эта память распределяется между несколькими потоками.
  • Execution Engine: это форма программного обеспечения, используемая для тестирования программного обеспечения, оборудования или полных систем. Механизм выполнения тестов никогда не несет никакой информации о тестируемом продукте.
  • Библиотеки собственных методов , которые являются исполняющим механизмом, нуждаются в собственных библиотеках (C, C++), а интерфейс собственных методов, который является основой для программирования, является интерфейсом собственных методов. Это позволяет коду Java, работающему в JVM, вызывать библиотеки и собственные приложения. Кроме того, стеки собственных методов имеют команду собственного кода, зависящую от собственной библиотеки. Он назначает хранилище собственным кучам или использует любой тип стека.

Компилятор Just In Time (JIT)

Хотя Java разрабатывался как интерпретируемый язык, для повышения производительности в Java нет ничего, что мешало бы компилировать байт-код в собственный код на лету. По этой причине вскоре после первоначального выпуска Java была выпущена JVM HotSpot. В HotSpot включен JIT-компилятор байт-кода. Компилятор Just In Time (JIT) является частью JVM, и по мере необходимости выбранные части байт-кода компилируются в исполняемый код в режиме реального времени. То есть по мере необходимости во время выполнения JIT-компилятор компилирует код. Кроме того, компилируются не все последовательности байт-кода, а только те, которые выиграют от компиляции. Однако метод «точно в срок» по-прежнему приводит к значительному увеличению неэффективности. Функция переносимости и безопасности по-прежнему существует, хотя динамическая компиляция применяется к байт-коду, поскольку JVM по-прежнему контролирует среду выполнения.

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

Интерпретируя байт-код, стандартная реализация JVM замедляет выполнение программ. Компиляторы JIT взаимодействуют с JVM во время выполнения для повышения производительности и компиляции соответствующих последовательностей байт-кода в собственный машинный код.

Аппаратное обеспечение интерпретирует код вместо JVM (виртуальная машина Java). Это может привести к увеличению производительности в скорости выполнения. Это можно сделать для каждого файла, для каждой функции или, может быть, для любого произвольного фрагмента кода; код часто компилируется, когда он близок к выполнению (отсюда и название «точно в срок»), а затем кэшируется и повторно используется позже без необходимости повторной компиляции. Он выполняет множество оптимизаций: анализ данных, перевод операций со стеком в операции с реестром, сокращение доступа к памяти за счет выделения реестра, устранение общих подвыражений.

Следовательно, исходя из вышеизложенного, мы пришли к убедительным различиям между ними, как указано в таблице ниже:

JVM

JIT

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