Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Кіріспе
Адаптивті оптимизация – компьютерлік ғылымдағы қазіргі орындалу профиліне сүйенген бағдарлама бөліктерін динамикалық түрде қайта құрастыру әдісі. Жай ғана іске асыруда адаптивті оптимизатор уақытында компиляциялау мен нұсқауларды тікелей орындау арасында таңдау жасауы мүмкін. Ал, жоғары деңгейде адаптивті оптимизация жергілікті деректер жағдайларын пайдаланып, шартты өтулерді (branch) оңтайландыруға және процедура шақыруларының бағасын төмендету үшін кодты тікелей енгізуге (inline expansion) қолдануы мүмкін. Мысалы, бірден-бір транзакцияларды өңдейтін банк қолданбасын қарастырайық. Бұл транзакциялар чектер, депозиттер және көптеген сирек кездесетін операциялар болуы мүмкін. Бағдарлама жұмыс істеген кезде, нақты деректер ондаған мыңдаған чектерді өңдеуден, бірде-бір депозитті немесе жалған шот нөмірі бар чекті өңдеместен тұруы мүмкін. Адаптивті оптимизатор осы жиі кездесетін жағдайға оңтайландырылған ассемблер кодын құрастырады. Егер жүйе ондаған мыңдаған депозиттерді өңдеуді бастаса, адаптивті оптимизатор жаңа жиі кездесетін жағдайға оңтайландырылған ассемблер кодын қайта құрастырады. Бұл оңтайландыруға кодты тікелей енгізу де кіруі мүмкін. Адаптивті оптимизацияның мысалдары – HotSpot және HP-нің Dynamo жүйелері. Кейбір жүйелерде, әсіресе Java виртуалды машинасы, байт-код нұсқауларының белгілі бір диапазоны бойынша орындалу процесін кері қайтаруға болады. Бұл адаптивті оптимизаторға код туралы қауіпті болжамдар жасауға мүмкіндік береді. Жоғарыдағы мысалда оптимизатор барлық транзакциялар – чектер және барлық шот нөмірлері жарамды деп есептеуі мүмкін. Егер бұл болжамдар қате болып шықса, адаптивті оптимизатор жарамды күйге қайта оралып, байт-код нұсқауларын дұрыс орындай алады.
Adaptive optimization is a technique in computer science that performs dynamic recompilation of portions of a program based on the current execution profile. With a simple implementation, an adaptive optimizer may simply make a trade off between just in time compilation and interpreting instructions. At another level, adaptive optimization may take advantage of local data conditions to optimize away branches and to use inline expansion to decrease the cost of procedure calls. Consider a hypothetical banking application that handles transactions one after another. These transactions may be checks, deposits, and a large number of more obscure transactions. When the program executes, the actual data may consist of clearing tens of thousands of checks without processing a single deposit and without processing a single check with a fraudulent account number. An adaptive optimizer would compile assembly code to optimize for this common case. If the system then started processing tens of thousands of deposits instead, the adaptive optimizer would recompile the assembly code to optimize the new common case. This optimization may include inlining code. Examples of adaptive optimization include HotSpot and HP's Dynamo system. In some systems, notably the Java Virtual Machine, execution over a range of bytecode instructions can be provably reversed. This allows an adaptive optimizer to make risky assumptions about the code. In the above example, the optimizer may assume all transactions are checks and all account numbers are valid. When these assumptions prove incorrect, the adaptive optimizer can 'unwind' to a valid state and then interpret the byte code instructions correctly.