Что означает инструментарий AOT?

Я знаю, что такое инструментарий байт-кода. Это просто изменение байт-кодов файлов .class во время выполнения, которое, по-видимому, доступно, начиная с JDK 1.5. Однако говорят, что это происходит во время загрузки класса, а не во время выполнения.

Теперь мой вопрос: что такое инструментарий AOT или Ahead of Time? Что такое обратная процедура? Инструментарий со временем?

Инструментирование вашего кода
Волокна Quasar основаны на инструментировании байт-кода. Это можно сделать во время загрузки класса с помощью Java Agent или во время компиляции с помощью задачи Ant.

Запуск инструментария
Облегченная реализация потока Java Agent Quasar основана на инструментировании байт-кода. Инструментирование может выполняться во время компиляции (подробнее см. ниже) или во время выполнения с использованием агента Java. Чтобы запустить агент Java, в командную строку java необходимо добавить следующее (или использовать ваш любимый инструмент сборки, чтобы добавить это в качестве аргумента JVM):

-javaagent:path-to-quasar-jar.jar

Инструментирование с опережением времени (AOT)
Простой и предпочтительный способ инструментирования программ с использованием Quasar — ​​это агент Java, который инструментирует код во время выполнения. Однако иногда запуск агента Java невозможен.

Quasar поддерживает инструментарий AOT с задачей Ant. Задача co.paralleluniverse.fibers.instrument.InstrumentationTask находится в quasar-core.jar, и она принимает набор файлов классов для инструмента. На самом деле не все классы будут инструментированы — только те, у которых есть suspendable methods (см. ниже), — поэтому просто дайте задаче все файлы классов в вашей программе. На самом деле Quasar оснащен инструментами заблаговременно.

Источник


person Alireza Mohamadi    schedule 12.05.2016    source источник
comment
У вас есть ссылка? Я бы сказал, что Ahead of Time instrumentation — это механизм инструментирования, в котором инструментирование происходит до выполнения кода (и инструментированный код сохраняется, чтобы его можно было выполнить позже без повторного инструментирования), и противоположным было бы Just in Time instrumentation, где код обрабатывается каждый раз непосредственно перед выполнением кода. См. также Опережающая компиляция и Точно подборка   -  person Andreas Fester    schedule 12.05.2016


Ответы (1)


Компиляция/инструментирование с опережением времени (AOT) — это просто то, что происходит до запуска программы.

Противоположностью AOT является Just-in-time или JIT. Это происходит во время выполнения. В Java загрузка классов выполняется во время выполнения, и с этим можно повозиться.

В вашем примере инструментирование AOT выполняется с помощью задачи Ant перед запуском программы, а изменения записываются в файл .class.

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

См. Википедия/Ahead-of-time-compilation и Wikipedia/Just-in-time-compilation для получения дополнительной информации.

person Polygnome    schedule 12.05.2016
comment
Инструментарий и JIT-оптимизация — разные вещи. - person Kayaman; 12.05.2016
comment
@Polygnome Нет, похоже, по-другому. Пожалуйста, смотрите мой обновленный вопрос. - person Alireza Mohamadi; 12.05.2016
comment
Кажется, это именно так. Qasar может сделать это либо AOT, используя задачу Ant, либо JIT, используя агент Java... но я сделал свой ответ более точным, чтобы лучше соответствовать вашему обновленному вопросу. - person Polygnome; 12.05.2016
comment
Спасибо за редактирование вашего ответа. Теперь я могу это принять. - person Alireza Mohamadi; 12.05.2016