پروپوزال پین کردن منطقه را در GC پیشفرض پیادهسازی میکند تا رشتههای جاوا هرگز مجبور نباشند تا پایان عملیات جمعآوری زباله منتظر بمانند.
جمع آوری زباله جاوا – تخصیص مجدد حافظه از طریق حذف اشیاء استفاده نشده – از طریق پیشنهادی که توسط توسعه دهندگان جاوا استاندارد در نظر گرفته می شود، بهبود می یابد.
یک پیشنهاد ارتقای JDK (JEP) که در جامعه OpenJDK جاوا ارائه شده است، نیازمند کاهش تأخیر است. با پیادهسازی پین کردن منطقه به جمعآورنده زباله G1 (Garbage-First)، بنابراین جمعآوری در طول نواحی حیاتی Java Native Interface (JNI) غیرفعال میشود. اهداف این طرح عبارتند از:
- بدون توقف رشته ها به دلیل مناطق بحرانی JNI.
- به دلیل مناطق بحرانی JNI، تاخیر اضافی برای شروع جمعآوری زباله وجود ندارد.
- حداقل رگرسیون در GC زمان هایی را که هیچ منطقه حیاتی JNI فعال نیست متوقف می کند.
- در زمانهای مکث GC هنگامی که هیچ منطقه حیاتی JNI فعال نیست، رگرسیون وجود ندارد.
در توضیح انگیزه این طرح، موافقان گفتند که برای قابلیت همکاری با زبان های برنامه نویسی مدیریت نشده مانند C و C++، JNI توابعی را برای دریافت و سپس انتشار نشانگرهای مستقیم به اشیاء جاوا تعریف می کند. این توابع باید به صورت جفت باشند: ابتدا یک اشاره گر به یک شی بگیرید. سپس، پس از استفاده از شی، نشانگر را رها کنید.
کد در چنین جفت تابعی در نظر گرفته می شود که در یک منطقه بحرانی اجرا شود و شی جاوا در حال استفاده یک شی بحرانی است. هنگامی که یک رشته جاوا در یک منطقه بحرانی است، JVM نباید شی حیاتی مرتبط را در طول جمعآوری زباله حرکت دهد. میتواند این کار را با سنجاق کردن چنین اشیایی به مکانهایشان انجام دهد، و اساساً آنها را در جای خود قفل کند، زیرا GC اشیاء دیگر را حرکت میدهد. یا زمانی که یک رشته در یک منطقه بحرانی است، JVM ممکن است GC را غیرفعال کند.
GC پیشفرض، G1، رویکرد دوم را اتخاذ میکند و مجموعه را در هر منطقه بحرانی غیرفعال میکند. این به طور قابل توجهی بر تأخیر تأثیر می گذارد. بر اساس پیشنهادی که در حال بررسی است، موضوعات جاوا هرگز منتظر تکمیل عملیات G1 GC نیستند. اهداف این پیشنهاد با گسترش G1 برای پین کردن مناطق دلخواه در طول عملیات جمع آوری عمده و جزئی محقق می شود.
پیشنهاد فرض میکند که هیچ تغییری در استفاده مورد انتظار از مناطق حیاتی JNI وجود نخواهد داشت. آنها کماکان استفاده خواهند شد و مدت زمان کوتاهی خواهند داشت. هنگامی که یک برنامه چندین منطقه را به طور همزمان پین می کند، خطر خستگی پشته وجود دارد. در حال حاضر هیچ راه حلی برای این وجود ندارد، اما این واقعیت که GC Shenandoah نواحی حافظه را در مناطق بحرانی JNI پین می کند و این مشکل را ندارد نشان می دهد که برای G1 مشکلی نخواهد بود.
این پیشنهاد در حال حاضر به نسخه ای از جاوا اشاره نمی کند که در آن این قابلیت ممکن است معرفی شود. نسخه بعدی جاوا استاندارد، JDK (کیت توسعه جاوا) ۱۸، در تاریخ ۲۲ مارس عرضه می شود و مجموعه ویژگی های آن ثابت شده است. JDK 19 معمولاً در سپتامبر دنبال میشود.
پست های مرتبط
پیشنهاد جاوا تأخیر GC را کاهش می دهد
پیشنهاد جاوا تأخیر GC را کاهش می دهد
پیشنهاد جاوا تأخیر GC را کاهش می دهد