Введение

Адаптивная оптимизация — это техника в информатике, которая выполняет динамическую перекомпиляцию фрагментов программы на основе текущего профиля выполнения. При простой реализации адаптивный оптимизатор может выбирать между JIT-компиляцией и интерпретацией инструкций. На более продвинутом уровне адаптивная оптимизация может использовать локальные условия данных для оптимизации ветвлений и применять встроенную подстановку (inline expansion) для снижения стоимости вызовов процедур. Рассмотрим гипотетическое банковское приложение, обрабатывающее транзакции последовательно. Эти транзакции могут быть чеками, депозитами и множеством других, менее распространенных операций. В процессе выполнения программы реальные данные могут состоять из обработки десятков тысяч чеков без единого депозита и без единого чека с мошенническим номером счета. Адаптивный оптимизатор скомпилирует машинный код для оптимизации этого типичного случая. Если система затем начнет обрабатывать десятки тысяч депозитов, адаптивный оптимизатор перекомпилирует машинный код для оптимизации нового типичного случая. Эта оптимизация может включать встроенную подстановку кода. Примерами адаптивной оптимизации являются HotSpot и система Dynamo от HP. В некоторых системах, в частности в виртуальной машине Java, выполнение последовательности инструкций байт-кода может быть надежно отменено. Это позволяет адаптивному оптимизатору делать смелые предположения о коде. В приведенном выше примере оптимизатор может предположить, что все транзакции — это чеки и все номера счетов действительны. Если эти предположения окажутся неверными, адаптивный оптимизатор сможет вернуться в корректное состояние и затем правильно интерпретировать инструкции байт-кода.