Адаптивная оптимизация


Адаптивная оптимизация — это метод в информатике , который выполняет динамическую перекомпиляцию частей программы на основе текущего профиля выполнения. При простой реализации адаптивный оптимизатор может просто найти компромисс между своевременной компиляцией и интерпретацией инструкций . На другом уровне адаптивная оптимизация может использовать локальные условия данных для оптимизации удаленных ветвей и использовать встроенное расширение для снижения стоимости вызовов процедур.

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

В некоторых системах, особенно в виртуальной машине Java , выполнение ряда инструкций байт - кода может быть доказуемо обратным. Это позволяет адаптивному оптимизатору делать рискованные предположения о коде. В приведенном выше примере оптимизатор может предположить, что все транзакции являются чеками и все номера счетов действительны. Когда эти допущения оказываются неверными, адаптивный оптимизатор может «развернуться» до допустимого состояния, а затем правильно интерпретировать инструкции байт-кода.