Каковы различия между Just-in-Time-Compiler и Интерпретатором?

Каковы различия между Just-in-Time-Compiler и Интерпретатором, и там различия между.NET и JIT-компилятором Java?

34
задан Matthias Braun 24 January 2018 в 13:09
поделиться

4 ответа

Своевременная компиляция - это преобразование неродного кода, например байт-кода, в машинный код непосредственно перед его выполнением.

Из Википедии:

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

Интерпретатор выполняет программу. Он может иметь или не иметь дрожание.

Опять же, из Википедии:

Интерпретатор может быть программой, которая либо

  1. выполняет исходный код напрямую
  2. , преобразует исходный код в некоторое эффективное промежуточное представление (code ) и немедленно выполняет это
  3. , явно выполняет сохраненный предварительно скомпилированный код, созданный компилятором , который является частью системы интерпретатора

. Как стандартные дистрибутивы Java, так и .NET имеют JIT-компиляцию, но по стандартам это не требуется. Компиляторы JIT в .NET и C #, конечно, отличаются, потому что промежуточный байт-код отличается. Но принцип тот же.

35
ответ дан 27 November 2019 в 16:09
поделиться

Когда вы компилируете язык Microsoft.NET, компилятор генерирует код, написанный на промежуточном языке Microsoft (MSIL). MSIL - это набор инструкций, которые можно быстро перевести в собственный код.

Приложение Microsoft.NET можно запустить только после того, как код MSIL переведен в собственный машинный код. В .NET Framework промежуточный язык преобразуется «точно в срок» (JIT) в собственный код при запуске приложения или компонента вместо компиляции приложения во время разработки.

подробнее

0
ответ дан 27 November 2019 в 16:09
поделиться

JIT-компилятор создает двоичные машинные коды, преобразующие исходный код блока. Переводчик переводит построчно.

2
ответ дан 27 November 2019 в 16:09
поделиться

Интерпретатор генерирует и выполняет инструкции машинного кода "на лету" для каждой инструкции, независимо от того, выполнялась ли она ранее.
JIT кэширует инструкции, которые ранее были интерпретированы в машинный код, и повторно использует эти инструкции машинного кода, тем самым экономя время и ресурсы, поскольку не требуется повторно интерпретировать операторы, которые уже были интерпретированы.

16
ответ дан 27 November 2019 в 16:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: