La optimización adaptativa es una técnica en informática y programación que recompila dinámicamente fragmentos de programas basados en el perfil de ejecución actual . En su implementación más simple, el optimizador adaptativo puede simplemente elegir entre la compilación sobre la marcha y la interpretación de instrucciones. En otro nivel , la optimización adaptativa puede aprovechar las condiciones de los datos locales para optimizar las sucursales y utilizar la expansión en línea para reducir los cambios de contexto .
Considere una aplicación bancaria hipotética que procesa transacciones una tras otra. Estas transacciones pueden ser cancelaciones, contribuciones y muchas otras transacciones oscuras. Cuando se ejecuta el programa, los datos reales pueden consistir en la compensación de decenas de miles de débitos sin un solo procesamiento de tarifa y sin un solo procesamiento de débito de una cuenta fraudulenta. El optimizador adaptativo compilará el código nativo, optimizándolo para el caso general. Si el sistema comienza a procesar decenas de miles de contribuciones, el optimizador adaptativo volverá a compilar el código de máquina para optimizar las nuevas condiciones comunes. Estas optimizaciones pueden incluir función en línea o mover el código de manejo de errores a un caché secundario.
En algunos sistemas, en particular la máquina virtual de Java , la ejecución de un rango de instrucciones de código de bytes se puede revertir de forma demostrable. Esto permite que el optimizador adaptativo haga suposiciones arriesgadas sobre el código. En el ejemplo anterior, el optimizador podría suponer que todas las transacciones son débitos y que todos los números de cuenta son correctos. Cuando estas suposiciones resultan ser incorrectas, el optimizador adaptativo puede "retroceder" al estado correcto y luego interpretar correctamente las instrucciones del código de bytes.