Что делает JIT-компилятор?

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

Так, какова обязанность JIT-компилятора?

33
задан Fund Monica's Lawsuit 17 April 2016 в 00:13
поделиться

6 ответов

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

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

Другой подход - компиляция HotSpot . Сначала он запускается как интерпретатор, но затем определяет, какие процедуры используются чаще всего, и компилирует только те. Преимущество состоит в том, что нет начальной задержки из-за компиляции. Кроме того, компилятор HotSpot может выполнять профилирование во время выполнения, а затем производить более сильную оптимизацию для наиболее важных подпрограмм. Он может даже собирать информацию, чтобы, когда вы запускаете одно и то же приложение снова и снова, оно будет работать все быстрее и быстрее. Более подробную информацию о компиляции HotSpot можно найти в этой статье (tnx Pangea для ссылки).

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

Обновление

Файлы байт-кода Python имеют расширение .py. Когда вы выполняете файл байт-кода, JIT-компилятор Python создает скомпилированный файл .pyc. В следующий раз, когда вы запустите ту же программу, если файл .py не изменился, нет необходимости компилировать его снова, вместо этого Python запускает ранее скомпилированный файл .pyc. Это ускоряет запуск программы.

33
ответ дан 27 November 2019 в 18:10
поделиться

JIT - это сокращение от «точно в срок». Компилятор JIT компилирует код, который часто находится на промежуточном языке, таком как байт-код Java или Microsoft IL, в собственный исполняемый код, и делает это в момент вызова кода. Таким образом, до тех пор, пока код не будет вызван, он существует только в переносимом, не зависящем от машины байт-коде или IL, а затем, когда он вызывается, генерируется собственный код (который затем повторно используется при последующих вызовах).

14
ответ дан 27 November 2019 в 18:10
поделиться

JIT = Точно в срок. Это процесс, посредством которого программа, которая в противном случае была бы интерпретирована (например, байт-коды Java или код Javascript), преобразуется в машинный код на лету при запуске для повышения производительности.

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

Этот вопрос может содержать дополнительную информацию: Как JIT-компилятор помогает производительности приложений?

3
ответ дан 27 November 2019 в 18:10
поделиться

Это своевременный компилятор, находящийся на полпути между интерпретатором и компилятором (т. Е. Он компилируется, но только непосредственно перед выполнением кода).

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

Для получения дополнительной информации, как всегда, см. Википедию :

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

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

7
ответ дан 27 November 2019 в 18:10
поделиться

Итак, какова обязанность ССГ составитель?

Как упоминали другие, это сокращение от «Just In Time», что в этом смысле означает «Как раз вовремя для исполнения».

Когда вы компилируете программы в машинный код, они часто ориентированы на определенную платформу.

Поэтому JIT был «изобретен», вы хотите скомпилировать последние биты и части вашего кода для исполняемой платформы, поэтому смотрите на это как «до выполнения» - компилятор / оптимизатор.

JIT делает нашу жизнь проще и делает (надеюсь) наши приложения быстрее.

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

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

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

Он увеличивает скорость за счет оптимизации сгенерированного кода для среды, в которой он работает (инструкции для ЦП, размер кеша и т. Д.).

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

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

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