Optimizarea adaptivă este o tehnică în informatică și programare care recompilează în mod dinamic fragmentele de program pe baza profilului de execuție curent . În cea mai simplă implementare, optimizatorul adaptiv poate alege pur și simplu între compilarea din mers și interpretarea instrucțiunilor. La un alt nivel , optimizarea adaptivă poate profita de condițiile locale de date pentru a optimiza ramurile și pentru a utiliza extinderea inline pentru a reduce schimbările de context .
Luați în considerare o aplicație bancară ipotetică care procesează tranzacțiile una după alta. Aceste tranzacții pot fi anulări, contribuții și multe alte tranzacții obscure. Atunci când programul este executat, datele efective pot consta în compensarea a zeci de mii de debite fără o singură procesare a taxei și fără o singură prelucrare a debitului dintr-un cont fraudulos. Optimizatorul adaptiv se va compila în codul nativ, optimizându-l pentru cazul general. Dacă sistemul începe apoi să proceseze zeci de mii de contribuții, optimizatorul adaptiv se va recompila în codul mașinii pentru a optimiza pentru noile condiții comune. Aceste optimizări pot include integrarea funcției sau mutarea codului de gestionare a erorilor într-un cache secundar.
Pe unele sisteme, în special pe mașina virtuală Java , execuția unei game de instrucțiuni bytecode poate fi inversată. Acest lucru permite optimizatorului adaptiv să facă presupuneri riscante despre cod. În exemplul de mai sus, optimizatorul ar putea presupune că toate tranzacțiile sunt debite și că toate numerele de cont sunt corecte. Atunci când aceste ipoteze se dovedesc a fi greșite, optimizatorul adaptiv poate „reveni” la starea corectă și apoi poate interpreta corect instrucțiunile bytecode.