Страницы

Поиск по вопросам

пятница, 14 июня 2019 г.

Как работает JIT-компилятор в .NET Framework?

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


Ответ

Когда среда CLR выполняет IL код, то происходит следующее: при вызове блока IL-кода JIT-компилятор проверяет и преобразует его в машинные команды которые он сохраняет в динамическом блоке памяти. Затем, он возвращается к структуре данных типа и заменяет адрес вызываемого метода адресом этого блока памяти и при следующем запросе повторная компиляция не будет выполнена, а будет использован уже скомпилированный код.
Теперь, непосредственно, ответ на ваш вопрос: нет, весь скомпилированный код хранится в динамической памяти, а это значит, что этот код уничтожается при выходе из приложения.
В тоже время, существует способ предварительной компиляции приложения в образ в машинном коде (Native Image) с помощью Native Image Generator (Ngen.exe)

Комментариев нет:

Отправить комментарий