Ottimizzazione adattativa
# Ottimizzazione adattativa

In informatica l'ottimizzazione adattativa è una tecnica che esegue una ricompilazione dinamica di porzioni di programma utilizzando dati proveniente dall'esecuzione del programma stesso al fine di migliorare l'esecuzione del programma. Questa tecnica è una via di mezzo tra la compilazione just-in-time e l'interpretazione delle istruzioni. In alcuni casi la ricompilazione dinamica utilizza i dati derivati dall'esecuzione del programma al fine di ridurre i salti condizionati e utilizza l'inline expansion per ridurre i cambi di contesto.

Per esempio si può immaginare un'ipotetica applicazione bancaria. Quest'applicazione permetterebbe di vedere il proprio estratto conto di eseguire movimenti di fondi e tutte le altre classiche operazioni bancarie. L'applicazione verrebbe utilizzata da molte persone che potenzialmente pur potendo eseguire centinaia di operazioni diverse tenderanno a eseguire poche operazioni molto comuni. Un'ottimizzazione dinamica potrebbe riconoscere che alcune transazioni vengono eseguite con estrema frequenza e quindi potrebbe tradurne il codice in codice assembler al fine di migliorare le prestazioni di queste poche transazioni molto comuni.

## Deottimizzazione

In alcuni sistemi come le Java Virtual Machine l'esecuzione di bytecode può essere invertita. Questo permette all'ottimizzazione adattiva di verificare quali condizioni sono state verificate dal codice e quindi di eseguire il codice successivo sapendo che quelle condizioni sono già state verificate. Per esempio la precedente applicazione bancaria dopo aver verificato che il conto corrente è valido potrebbe eseguire le operazioni successive senza ogni volta verificare la condizione dato che questa risulta essere già valida.

