Для чего необходим компилятор JIT?

Механизм, который занимается преобразование кода MSIL в машинный код, называется компилятором JIT (" just-in-time "). Этот компилятор преобразует код MSIL в машинный код "на лету". Это позволяет сделать процесс запуска приложений более "прозрачным". При запуске исполняемого файла. NET компилятор автоматически определяет, была ли эта сборка скомпилирована.

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

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

В случае, когда необходимо выполнить предкомпиляцию приложения до его запуска (для предотвращения ситуации компиляции приложения "на лету"), можно воспользоваться утилитой NGen (native image generator), которая поставляется в составе. NET Framework. Утилита NGen использует аналогичные методы компиляции приложения, что и компилятор JIT. Однако, от компилятора JIT эту утилиту отличает три аспекта:

· преобразование кода MSIL в машинный код производится перед выполнением приложения, а не в момент исполнения;

· преобразовываются сразу вся сборка, а не отдельные методы;

· полученный машинный код сохраняется в кэше образа машинного кода в виде файла на жестком диске.

39Каким образом можно скомпилировать приложение из MSIL кода в машинный код перед запуском приложения?


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: