Подтвердить что ты не робот

В чем разница между компилятором Just-in-Time и интерпретатором?

В чем разница между компилятором Just-in-Time и интерпретатором и существуют ли различия между компилятором .NET и JAVA JIT?

4b9b3361

Ответ 1

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

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

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

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

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

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

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

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

Ответ 2

Я всегда находил, что иногда помогает более абстрактное объяснение. Скажите, что вы пытаетесь спросить всех в Мексике "Привет, как дела?" (ваш исходный язык). Конечно, сначала вам нужно перевести его на испанский (родной язык страны). Этот перевод будет "Hola. Como estas?"

Если вы знаете испанский язык, вам не нужно будет переводить (собственный код/​​ассемблер). Вы просто спрашиваете "Hola. Como estas?"

Если вы не знаете испанского языка, есть 3 способа справиться с этим.

Во-первых, вы получите испанский словарь (компилятор) и посмотрите, что такое испанские слова перед тем, как идти. Возможно, вы понимаете, что "Hola. Que tal?" это один слог более короткий ( оптимизация компилятора) и использовать его вместо этого. Это компиляция языка; вы заранее переводите информацию на родной язык.

Во-вторых, вы просматриваете слова в испанском словаре, когда вы стоите перед первым человеком, а затем сохраняете результат (просматривая слова точно в срок). Преимущество здесь в том, что вы можете получить словарь мандарина, а затем сделать тот же эксперимент в Китае, не оставляя десяти липких заметок (для разных платформ) переведенных фраз.

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

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

Ответ 3

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

Ответ 4

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

Обратите внимание, что интерпретаторы очень редко производят любую форму машинного кода. Примерно в единственный раз, когда интерпретатор будет выдавать машинный код, это когда оператор должен выполнять некоторую операцию, которая действительно не может быть выполнена каким-либо другим способом. Например, если интерпретатор BASIC, работающий на 8080, встречает команду "OUT 100,5", она обычно выполняет эту операцию, сохраняя D3 64 C9 (OUT 64h/RET) в три последовательных байта на каком-либо фиксированном адресе, загружая A с 5, и ВЫБОР этого адреса. Интерпретатор может технически генерировать машинный код, но если один из них должен выполнять ту же самую инструкцию OUT 500 раз, интерпретатор должен будет каждый раз генерировать машинный код.

Ответ 5

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

Ответ 6

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

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

дополнительная информация

Ответ 7

При первом обращении к классу JIT Execution Engine повторно компилирует файлы .class(первичные бинарные файлы), сгенерированные компилятором Java, содержащим набор JVM-команд, в двоичные коды, содержащие набор инструкций систем HOST. JIT хранит и повторно использует перекомпилированные двоичные файлы из памяти в будущем, там, сокращая время интерпретации и преимущества от выполнения собственного кода.

С другой стороны, простой старый интерпретатор java интерпретирует одну инструкцию JVM из файла класса за раз и вызывает процедуру против него.

Найти сравнение деталей здесь http://bitshub.blogspot.com/2010/01/Flavors-of-JVM.html

Ответ 8

ТЛ; дг

Интерпретатор: принимает только одну команду за раз для выполнения

В режиме "точно в срок" : блок блоков сразу и компилируется перед выполнением. поэтому есть много возможностей для оптимизации