بهینه‌ساز آبجکت کد

بهینه‌ساز کد هدف (آبجکت کد)، که گاهی اوقات به عنوان بهینه‌ساز پست پاس نیز شناخته می‌شود یا برای بخشهای کوچکی از کد، بهینه‌ساز peephole نامیده می‌شود، خروجی را از مرحله کامپایل زبان منبع - کد هدف (آبجکت کد) یا فایل باینری - می‌گیرد و سعی می‌کند بخشهای قابل شناسایی کد را با کد جایگزینی که از نظر الگوریتمی کارآمدتر باشد، جایگزین کند (که معمولاً سرعت بهبود می‌یابد).

نمونه‌ها 
 " بهینه‌ساز باینری اتوماتیک IBM برای z / OS (ABO) در سال ۲۰۱۵ به عنوان یک فناوری پیشرفته که برای بهینه‌سازی عملکرد برنامه‌های COBOL در بزرگ‌رایانه‌های IBM Z بدون نیاز به کامپایل دوباره سورس کد طراحی شده‌است، معرفی شد. این بهینه‌ساز از تکنولوژی بهینه‌سازی پیشرفته موجود در آخرین Enterprise COBOL استفاده می‌کند. ABO باینری‌های کامپایل شده را بدون تأثیر بر منطق برنامه بهینه می‌کند. در نتیجه، برنامه سریعتر اجرا می‌شود اما رفتار بدون تغییر باقی می‌ماند بنابراین تلاش برای تست کاهش می‌یابد. کاربران معمولاً وقتی که به یک کامپایلر جدید یا سطح‌های سخت‌افزار IBM Z ارتقاء می‌دهند ۱۰۰ درصد از کد خود را کامپایل مجدد نمی‌کنند، در نتیجه کدی که مجدد کامپایل نشده‌است قادر به استفاده از مزیت‌های ویژگی‌های موجود در سخت‌افزار جدید IBM Z نخواهد بود. اکنون با استفاده از ABO، کابران یک گزینه دیگر برای کاهش استفاده از CPU و هزینه‌های عملیاتی برنامه‌های بیزینسی و حیاتی COBOL خود دارند. شما می‌توانید بدون نصب ABO روی سیستم خود و از طریق سرویس ابری تست بهبود یافته ABO آنرا امتحان کنید.
 اولین "COBOL Optimizer" توسط شرکت Capex در اواسط دهه ۱۹۷۰ برای COBOL ساخته شد. در این حالت، این نوع بهینه‌ساز به دانش "ضعف" در کامپایلر استاندارد IBM COBOL بستگی داشت و در واقع بخشهای کد شی را با کد کارآمدتر جایگزین (یا وصله) کرد. کد جایگزین ممکن است به عنوان مثال جایگزین جستجوی جدول خطی با جستجوی دودویی شود یا گاهی اوقات به راحتی یک دستورالعمل نسبتاً کند را با یک دستورالعمل سریعتر شناخته شده جایگزین کند که از نظر عملکرد در کانتکست آن معادل است. این تکنیک اکنون به عنوان کاهش قدرت شناخته می‌شود. به عنوان مثال، در سخت‌افزار IBM / 360، دستورالعمل CLI بسته به مدل خاص، بین دو تا ۵ برابر سریعتر از دستورالعمل CLC برای مقایسه تک بایت بود.

مزایا 
مزیت اصلی بهینه‌سازی مجدد برنامه‌های موجود این بود که می‌توان موجودی برنامه‌های مشتری از قبل کامپایل شده (آبجکت کد) را تقریباً بلافاصله با حداقل تلاش بهبود بخشید که کاهش منابع CPU با هزینه ثابت (قیمت نرم‌افزار اختصاصی) را در پی دارد. یک نقطه ضعف این بود که انتشار جدید COBOL، به عنوان مثال، نیاز به نگهداری بهینه‌ساز دارد تا بتواند الگوریتم‌های COBOL داخلی را که احتمالاً تغییر کرده‌اند، تأمین کند. با این حال، از آنجا که انتشار جدید کامپایلرهای COBOL غالباً با به روز رسانی‌های سخت‌افزاری همزمان می‌شود، سخت‌افزار سریع تر معمولاً بیش از این جبران کننده برنامه‌های کاربردی است که به نسخه‌های از پیش بهینه شده آنها بازمی‌گردند (تا زمانی که یک بهینه‌ساز پشتیبانی منتشر شود).

بهینه‌سازهای دیگر 
برخی از بهینه‌سازهای باینری فشرده سازی اجرایی را انجام می‌دهند، که با استفاده از تکنیک‌های عمومی فشرده سازی داده‌ها اندازه فایل‌های باینری را درجهت کاهش نیازهای فضای ذخیره‌سازی و زمان بارگیری و جابجایی، کاهش می‌دهند اما در بهبود عملکرد زمان اجرا اثری ندارند. تلفیق واقعی ماژول‌های کتابخانه تکراری نیز می‌تواند حافظه را کاهش دهد.

برخی از بهینه‌سازهای باینری از معیارهای زمان اجرا (پروفایلینگ) برای بهبود عملکرد از طریق تکنیک‌های مشابه کامپایلرهای JIT استفاده می‌کنند.

توسعه‌های اخیر 
بسیاری از «بهینه سازهای باینری» توسعه داده شده اخیر برای سیستم عامل‌های مختلف، که برخی ادعای نوآوری دارند، اما با این وجود، اساساً از همان روش‌های توصیف شده در بالا (یا مشابه) استفاده می‌کنند، عبارتند از:
 بهینه‌ساز باینری اتوماتیک IBM برای z/OS (ABO) (2015)
 بهینه‌ساز باینری اتوماتیک IBM برای z/OS (ABO) سرویس امتحان ابری (۲۰۲۰)
 بهینه‌ساز کد باینری Sun Studio - که از قبل به فاز پروفایل نیاز دارد
 طراحی و مهندسی یک بهینه‌ساز باینری پویا - از مرکز تحقیق T.J. Watson - IBM (فوریه 2005)
 QuaC: بهینه‌سازی باینری برای تولید سریع کد اجرا در C - (که به نظر می‌رسد شامل برخی از عناصر JIT است)
 DynamoRIO
 COBRA: یک چارچوب بهینه‌سازی باینری تطبیقی برای برنامه‌های چند رشته‌ای
 Spike Executable Optimizer (هسته یونیکس)
 "SOLAR" بهینه‌سازی نرم‌افزار در زمان اتصال و زمان اجرا

صفحات مرتبط 
 کامپایل مجدد باینری
 ترجمه باینری
 حذف کد مرده پویا

منابع 

بهینه‌سازی نرم‌افزار
کارایی رایانه
بهینه‌سازی کامپایلر