La optimización adaptativa es una técnica de la informática que realiza una recompilación dinámica de partes de un programa en función del perfil de ejecución actual. Con una implementación sencilla, un optimizador adaptativo puede simplemente hacer un equilibrio entre la compilación en tiempo real y la interpretación de instrucciones . En otro nivel, la optimización adaptativa puede aprovechar las condiciones de los datos locales para optimizar las ramas externas y utilizar la expansión en línea para reducir el costo de las llamadas a procedimientos.
Consideremos una aplicación bancaria hipotética que maneja transacciones una tras otra. Estas transacciones pueden ser cheques, depósitos y una gran cantidad de transacciones más oscuras. Cuando el programa se ejecuta, los datos reales pueden consistir en la compensación de decenas de miles de cheques sin procesar un solo depósito y sin procesar un solo cheque con un número de cuenta fraudulento. Un optimizador adaptativo compilaría código ensamblador para optimizar este caso común. Si el sistema comenzara a procesar decenas de miles de depósitos, el optimizador adaptativo volvería a compilar el código ensamblador para optimizar el nuevo caso común. Esta optimización puede incluir código en línea.
Algunos ejemplos de optimización adaptativa son HotSpot y el sistema Dynamo de HP . [1]
En algunos sistemas, en particular la máquina virtual Java [ cita requerida ] , la ejecución de un rango de instrucciones de código de bytes se puede revertir de manera demostrable. Esto permite que un optimizador adaptativo haga suposiciones arriesgadas sobre el código. En el ejemplo anterior, el optimizador puede suponer que todas las transacciones son cheques y que todos los números de cuenta son válidos. Cuando estas suposiciones resultan incorrectas, el optimizador adaptativo puede "desenrollarse" a un estado válido y luego interpretar las instrucciones de código de bytes correctamente.