От: | Serginio1 | https://habrahabr.ru/users/serginio1/topics/ | |
Дата: | 20.10.16 09:22 | ||
Оценка: |
JIT-компиляция (англ. Just-in-time compilation, компиляция «на лету»), динамическая компиляция (англ. dynamic translation) — технология увеличения производительности программных систем, использующих байт-код, путём компиляции байт-кода в машинный код или в другой формат непосредственно во время работы программы.
Ahead-of-Time (AOT) компилятор — это вид транслятора, который использует метод компиляции перед исполнением (англ. ahead-of-time compilation). Применяется как для компиляции высокоуровневых языков (например, Си, С++ или Паскаль), так и для компиляции «промежуточных» языков, таких как байт-код Java, .NET Common Intermediate Language (CIL), IBM System/38, IBM System i.
Во многих реализациях языков программирования используется JIT-компиляция, которая позволяет компилировать промежуточный код напрямую в бинарный во время его выполнения, что позволяет существенно увеличить скорость выполнения. JIT требует выделения дополнительной памяти.
Метод АОТ не требует выделения дополнительной памяти и АОТ-компиляция проходит с минимальной нагрузкой на систему. Процесс компиляции полностью выполняется перед выполнением программы.
In some operating system configurations (mostly embedded systems) the operating system services for generating code dynamically are not available, this prevents Mono’s JIT from working. In those systems, you can use –aot=full to ensure that Mono precompiles everything, and then use the option –full-aot to ensure that Mono never uses the JIT engine.
# Do a full AOT:
$ mono --aot=full mscorlib.dll
$ mono --aot=full sample.exe
# Run, but request that Mono never tries to JIT:
$ mono --full-aot sample.exe
Full AOT is a fairly straightforward process except in the case of generic instantiations. In those cases Mono must perform a static analysis of the code and determine all of the possible instantiations of a type and generate the code required. For example if a program uses a List<int> and a List<double> mono will detect this and generate all of the referenced methods for both data types.