Кіріспе

Адаптивті оптимизация – компьютерлік ғылымдағы қазіргі орындалу профиліне сүйенген бағдарлама бөліктерін динамикалық түрде қайта құрастыру әдісі. Жай ғана іске асыруда адаптивті оптимизатор уақытында компиляциялау мен нұсқауларды тікелей орындау арасында таңдау жасауы мүмкін. Ал, жоғары деңгейде адаптивті оптимизация жергілікті деректер жағдайларын пайдаланып, шартты өтулерді (branch) оңтайландыруға және процедура шақыруларының бағасын төмендету үшін кодты тікелей енгізуге (inline expansion) қолдануы мүмкін. Мысалы, бірден-бір транзакцияларды өңдейтін банк қолданбасын қарастырайық. Бұл транзакциялар чектер, депозиттер және көптеген сирек кездесетін операциялар болуы мүмкін. Бағдарлама жұмыс істеген кезде, нақты деректер ондаған мыңдаған чектерді өңдеуден, бірде-бір депозитті немесе жалған шот нөмірі бар чекті өңдеместен тұруы мүмкін. Адаптивті оптимизатор осы жиі кездесетін жағдайға оңтайландырылған ассемблер кодын құрастырады. Егер жүйе ондаған мыңдаған депозиттерді өңдеуді бастаса, адаптивті оптимизатор жаңа жиі кездесетін жағдайға оңтайландырылған ассемблер кодын қайта құрастырады. Бұл оңтайландыруға кодты тікелей енгізу де кіруі мүмкін. Адаптивті оптимизацияның мысалдары – HotSpot және HP-нің Dynamo жүйелері. Кейбір жүйелерде, әсіресе Java виртуалды машинасы, байт-код нұсқауларының белгілі бір диапазоны бойынша орындалу процесін кері қайтаруға болады. Бұл адаптивті оптимизаторға код туралы қауіпті болжамдар жасауға мүмкіндік береді. Жоғарыдағы мысалда оптимизатор барлық транзакциялар – чектер және барлық шот нөмірлері жарамды деп есептеуі мүмкін. Егер бұл болжамдар қате болып шықса, адаптивті оптимизатор жарамды күйге қайта оралып, байт-код нұсқауларын дұрыс орындай алады.