طرح OpenJDK زمان راهاندازی ماشین مجازی جاوا را با قابلیت بارگیری برنامههای جاوا و کتابخانههایی که قبلاً در کد اصلی کامپایل شدهاند، بهبود میبخشد.
ماشین مجازی جاوا، که به خاطر قابلیت حمل “یک بار بنویسید، هر جا اجرا شود” برنامه های جاوا مشهور است، برای کامپایل زودرس (AOT) در نظر گرفته شده است، که راه اندازی سریعتر و اجرای پایه برنامه های جاوا.
یک پیشنهاد پیشنویس OpenJDK اخیراً JVM را با توانایی بارگیری برنامهها و کتابخانههای جاوا که قبلاً کامپایل شدهاند تقویت میکند. به کد بومی این پیشنهاد به مسائل عملکردی میپردازد که از مدل اجرای سه مرحلهای قابل تنظیم جاوا ناشی میشود، که شامل تکرارهای زیادی از بهینهسازی و بهینهسازی میشود. این فرآیند پویا همچنین به این معنی است که گرم کردن کد می تواند زمان زیادی طول بکشد و باعث مشکلات عملکرد در برنامه ها شود. در این پیشنهاد آمده است که این مسائل مربوط به عملکرد گاهی حیاتی هستند و بنابراین غیرقابل قبول هستند.
کامپایلر Graal، که جایگزینی در دسترس برای رشته کامپایلر C2 جاوا قبل از جاوا ۱۷ بود، به عنوان مثال خوبی عمل می کند. Bootstrapping Graal بر عملکرد برنامه تأثیر منفی گذاشت، زیرا Graal باید قبل از اینکه بتواند مزایای عملکرد خود را ارائه دهد، خودش کامپایل می شد.
همچنین بر عملکرد جاوا تأثیر بهینهسازی میگذارد که زمانی اتفاق میافتد که کد کامپایلشده C2 به یک فرض نادرست برخورد میکند، که میتواند پرهزینه باشد. یک راه حل برای این مشکلات این است که یک نوع دائمی متد کامپایل شده با AOT C1 جایگزین مفسر و کامپایل زمان اجرا C1 شود، به طوری که در هنگام راه اندازی، اجرا با کد C1 از پیش کامپایل شده شروع می شود و سپس به کامپایل C2 می رسد و برخی از مراحل گرم کردن را دور می زند. و همچنین مترجم.
با پروژه Galahad که کامپایل AOT بالقوه را برای کامپایلر JIT که در JDK ادغام میشود، دوباره معرفی میکند، در این پیشنهاد میتوان کامپایل AOT را برای JVM نیز در نظر گرفت. این به Galahad یک پلت فرم آماده برای بارگیری یک کامپایلر از پیش کامپایل شده در JVM می دهد.
با تشریح معیارهای موفقیت، این پیشنهاد بیان میکند که برنامهها و کتابخانههای جاوا و مؤلفههای JVM قابل اتصال که در جاوا نوشته شدهاند، مانند کامپایلرهای JVMCI، باید بتوانند زودتر از موعد به کدهای بومی کامپایل شوند، در حالتهای پروفایل یا بهینهسازی. اینها در یک JVM منطبق با عملکرد خط پایه بالا، با دور زدن مفسر بارگذاری می شوند. هدف پیشنهاد پشتیبانی از تلفیقی AOT برای کدهایی نیست که محدودیتهای پروژه لیدن را نقض میکند، که به کندی راهاندازی، عملکرد اوج و مشکلات ردپای در جاوا میپردازد.
پست های مرتبط
تدوین پیش از زمان برای JVM پیشنهاد شده است
تدوین پیش از زمان برای JVM پیشنهاد شده است
تدوین پیش از زمان برای JVM پیشنهاد شده است