Что делает компилятор JIT? - PullRequest
470 голосов
/ 18 сентября 2008

Что конкретно делает JIT-компилятор в отличие от не-JIT-компилятора? Может ли кто-нибудь дать краткое и простое для понимания описание?

Ответы [ 19 ]

2 голосов
/ 16 апреля 2014

Jit означает как раз вовремя компилятор jit - это программа, которая превращает Java-байт-код в инструкцию, которую можно отправить непосредственно процессору.

Используя компилятор java точно в срок (на самом деле второй компилятор) на конкретной системной платформе, компилирует байт-код в конкретный системный код, после того как код перекомпилирован компилятором jit, он обычно будет выполняться быстрее в компьютер.

Компилятор Just-in-Time поставляется с виртуальной машиной и используется по желанию. Он компилирует байт-код в специфичный для платформы исполняемый код, который выполняется немедленно.

2 голосов
/ 26 сентября 2018

Компилятор "точно в срок" (JIT) - это часть программного обеспечения, которая получает неисполняемый ввод и возвращает соответствующий машинный код для выполнения. Например:

Intermediate representation    JIT    Native machine code for the current CPU architecture

     Java bytecode            --->        machine code
     Javascript (run with V8) --->        machine code

Следствием этого является то, что для определенной архитектуры ЦП должен быть установлен соответствующий JIT-компилятор.

Компилятор различий, интерпретатор и JIT

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

  1. Компилятор : принимает исходный код и возвращает исполняемый файл
  2. Интерпретатор : выполняет инструкцию программы по команде. Он берет исполняемый сегмент исходного кода и превращает этот сегмент в машинные инструкции. Этот процесс повторяется до тех пор, пока весь исходный код не будет преобразован в машинные инструкции и выполнен.
  3. JIT : Возможно множество различных реализаций JIT, однако JIT обычно представляет собой комбинацию компилятора и интерпретатора. Сначала JIT преобразует промежуточные данные (например, байт-код Java), которые он получает в машинный язык посредством интерпретации. JIT часто может ощущать, когда определенная часть кода выполняется часто, и она скомпилирует эту часть для более быстрого выполнения.
1 голос
/ 06 апреля 2018
Компиляция

Just-in-Time (JIT) (также динамическая трансляция или компиляция во время выполнения) - это способ выполнения компьютерного кода , который включает компиляцию во время выполнения программа - во время выполнения - , а не до выполнения .

IT-компиляция представляет собой комбинацию двух традиционных подходов к переводу в машинный код - заблаговременная компиляция (AOT) и интерпретация - и сочетает в себе некоторые преимущества и недостатки обоих. JIT-компиляция сочетает в себе скорость скомпилированного кода с гибкостью интерпретации .

Давайте рассмотрим JIT, используемый в JVM,

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

Когда метод выбран для компиляции, JVM передает свой байт-код компилятору Just-In-Time (JIT). JIT должен понимать семантику и синтаксис байт-кода, прежде чем он сможет правильно скомпилировать метод. Чтобы помочь JIT-компилятору проанализировать метод, его байт-код сначала переформулируется во внутреннее представление, называемое деревьями трассировки, которое больше напоминает машинный код, чем байт-код. Затем выполняется анализ и оптимизация деревьев метода. В конце деревья переводятся в нативный код.

Дерево трассировки - это структура данных, которая используется при компиляции программного кода во время выполнения. Деревья трассировки используются в виде компилятора «точно в срок», который отслеживает код, выполняемый во время «горячих точек», и компилирует его. См. это .

См .:

1 голос
/ 18 сентября 2008

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

1 голос
/ 25 ноября 2015

В следующих примерах кода показано, как JIT оптимизирует код Java.

Код перед оптимизацией

    class A {
      B b;
      public void newMethod() {
        y = b.get();
        ...do stuff...
        z = b.get();
        sum = y + z;
      }
    }

class B {
   int value;
   final int get() {
      return value;
   }
}

Код после оптимизации

class A {
B b;
public void newMethod() {
   y = b.value;
   ...do stuff...
   sum = y + y;
}
}
class B {
   int value;
   final int get() {
      return value;
   }
}

Первоначально код содержал два вызова метода b.get (). После оптимизации два вызова метода оптимизируются в одну операцию копирования переменной; то есть оптимизированному коду не нужно выполнять вызов метода для получения значения поля класса B.

0 голосов
/ 11 марта 2019

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

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

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

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

0 голосов
/ 06 июля 2014

20% байтового кода используется 80% времени. JIT-компилятор получает эту статистику и оптимизирует эти 20% байтового кода для более быстрой работы, добавляя встроенные методы, удаляя неиспользуемые блокировки и т. Д., А также создавая байт-код, специфичный для этой машины. Я цитирую из этой статьи, я нашел, что это было удобно. http://java.dzone.com/articles/just-time-compiler-jit-hotspot

0 голосов
/ 13 декабря 2015

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

0 голосов
/ 03 ноября 2014

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...