Адаптивная оптимизация — это метод в информатике , который выполняет динамическую перекомпиляцию частей программы на основе текущего профиля выполнения. При простой реализации адаптивный оптимизатор может просто сделать компромисс между компиляцией «точно в срок» и интерпретацией инструкций . На другом уровне адаптивная оптимизация может использовать преимущества локальных условий данных для оптимизации ветвей и использовать встроенное расширение для снижения стоимости вызовов процедур.
Рассмотрим гипотетическое банковское приложение, которое обрабатывает транзакции одну за другой. Эти транзакции могут быть чеками, депозитами и большим количеством более неясных транзакций. Когда программа выполняется, фактические данные могут состоять из клиринга десятков тысяч чеков без обработки одного депозита и без обработки одного чека с мошенническим номером счета. Адаптивный оптимизатор скомпилирует ассемблерный код для оптимизации для этого распространенного случая. Если бы затем система начала обрабатывать десятки тысяч депозитов вместо этого, адаптивный оптимизатор перекомпилировал бы ассемблерный код для оптимизации нового распространенного случая. Эта оптимизация может включать в себя встраивание кода.
Примерами адаптивной оптимизации являются HotSpot и система Dynamo компании HP . [1]
В некоторых системах, в частности, в Java Virtual Machine [ требуется цитата ] , выполнение ряда инструкций байт-кода может быть доказуемо обращено. Это позволяет адаптивному оптимизатору делать рискованные предположения о коде. В приведенном выше примере оптимизатор может предположить, что все транзакции являются проверками и все номера счетов действительны. Когда эти предположения оказываются неверными, адаптивный оптимизатор может «раскрутиться» до действительного состояния, а затем правильно интерпретировать инструкции байт-кода.