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

Я просто читал, тот Android имеет 450%-е повышение производительности, потому что он добавил JIT-компилятор, я знаю, каков JIT, но я действительно не понимаю, почему это быстрее, чем нормальный скомпилированный код? или каково различие с более старым подходом с платформы Android (Java как выполненный скомпилированный байт-код).

Спасибо!

Править: Это чрезвычайно интересно, Спасибо!, мне жаль, что я не мог выбрать каждый ответ как корректный :)

6
задан igorgue 13 May 2010 в 17:16
поделиться

4 ответа

Сначала оговорюсь, я совсем не знаком с Android. В любом случае...

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

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

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

5
ответ дан 9 December 2019 в 22:30
поделиться

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

Вот почему он может работать быстрее, чем традиционная система java, где код выполнялся только как байт-код, который также использовался Android.

2
ответ дан 9 December 2019 в 22:30
поделиться

Помимо компиляции java-кода в нативный код, что тоже можно сделать с помощью компилятора, JIT выполняет оптимизацию, которую можно сделать только во время выполнения.

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

1
ответ дан 9 December 2019 в 22:30
поделиться

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

В Java VM наблюдалось подобное ускорение, когда JIT-версии VM заменили первоначальные версии интерпретатора.

3
ответ дан 9 December 2019 в 22:30
поделиться
Другие вопросы по тегам:

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