جاوا ۲۱ با ۱۵ ویژگی از جمله موضوعات مجازی، جمعآوری زباله نسل Z و API مکانیزم کپسولهسازی کلید وارد نسخه تولیدی شده است.
کیت توسعه جاوا (JDK) 21، جدیدترین نسخه پشتیبانی بلندمدت (LTS) اجرای استاندارد جاوا Oracle، در نسخه تولیدی عرضه شد. بر اساس جاوا ۲۱، آخرین نسخه پلتفرم Java SE (نسخه استاندارد)، JDK 21 دارای ۱۵ ویژگی است، از جمله مکانیزم محصور کردن کلید API، رشتههای مجازی، و پیشنمایش قالبهای رشتهای و همزمانی ساختاریافته . یکی از ویژگیهای پیشنهادی شانزدهم، ضایعگیر Shenandoah، در ژوئن حذف شد< /a>.
JDK 21 را می توان از Oracle.com با پشتیبانی در دسترس از Oracle< مشاهده کرد. /a>. اوراکل حداقل به مدت هشت سال از JDK 21 پشتیبانی خواهد کرد. این شرکت همچنین اعلام کرد که پشتیبانی طولانی مدت برای Java 11، که پنج سال پیش منتشر شد، تا ژانویه ۲۰۳۲ تمدید شده است.
Oracle نسخههای جدید جاوای استاندارد را هر شش ماه منتشر میکند. نسخه قبلی، JDK 20، در ۲۱ مارس عرضه شد. نسخههای بلندمدت هر دو سال یکبار ارائه میشوند که با نسخههای کوتاهمدت همراه با پشتیبانی شش ماهه همراه است.
۱۵ ویژگی JDK 21 عبارتند از:
- همزمانی ساختاریافته، در مرحله پیشنمایش، برنامهنویسی همزمان را از طریق یک API برای همزمانی ساختاریافته، درمان گروهها ساده میکند. از وظایف مرتبط که در موضوعات مختلف به عنوان یک واحد کار اجرا می شوند. این کار مدیریت خطا و لغو را ساده می کند، قابلیت اطمینان را بهبود می بخشد و قابلیت مشاهده را افزایش می دهد. همزمانی ساختاریافته قبلاً در JDK 20 و JDK 19 که به ترتیب در ماه مارس و سپتامبر ۲۰۲۲ منتشر شدند، ذخیره شده بود. قرار است به عنوان یک API پیشنمایش در java.util.concurrent. تنها تغییر مهم این بار این است که
StructuredTaskScope::Fork(...)
به جایمقادیر محدوده، همچنین در پیشنمایش، اشتراکگذاری دادههای تغییرناپذیر را در داخل و بین رشتهها فعال میکند. آنها به متغیرهای thread-local ترجیح داده می شوند، به ویژه زمانی که از تعداد زیادی رشته مجازی استفاده می شود. متغیرهای Thread-local دارای اشکالاتی در طراحی هستند که شامل تغییرپذیری نامحدود، طول عمر نامحدود و وراثت گران است. یک مقدار scoped اجازه می دهد تا داده ها به طور ایمن بین اجزای یک برنامه بزرگ بدون توسل به آرگومان های متد به اشتراک گذاشته شوند. این پیشنهاد در JDK 20 انکوبه شد. اهداف این طرح شامل سهولت استفاده، قابل درک بودن، استحکام و عملکرد است.
- پیشنهادی برای آمادهسازی برای ممنوع کردن بارگیری پویا عوامل نیازمند صدور اخطار زمانی است که عاملها به صورت پویا بارگیری میشوند. به JVM در حال اجرا. این هشدارها برای آمادهسازی نسخهای در آینده است که بهطور پیشفرض بارگذاری پویا عاملها را ممنوع میکند، تا بهطور پیشفرض یکپارچگی را بهبود بخشد. . اهداف دیگر پیشنهاد عبارتند از ارزیابی مجدد تعادل بین قابلیت سرویس، که شامل تغییرات موقت در کد در حال اجرا است، و یکپارچگی، که فرض می کند کد در حال اجرا خودسرانه تغییر نمی کند، و اطمینان از اینکه اکثر ابزارها، که نیازی به بارگذاری پویا عوامل ندارند، تحت تاثیر قرار نمی گیرند. این طرح همچنین خواستار هماهنگی توانایی بارگذاری عوامل به صورت پویا با سایر قابلیتهای به اصطلاح «ابر قدرت» مانند بازتاب عمیق است. یک عامل مؤلفه ای است که می تواند کد برنامه را در حین اجرای برنامه تغییر دهد. اینها توسط Java Platform Profiling Architecture در JDK 5 در سال ۲۰۰۴ به عنوان راهی برای ابزارها (به ویژه پروفایلرها) به کلاس های ابزار معرفی شدند. در حالی که عوامل با در نظر گرفتن ابزار دقیق طراحی شده بودند، توسعه دهندگان پیشرفته موارد استفاده را پیدا کردند، مانند برنامه نویسی جنبه گرا که رفتار برنامه را به روش های دلخواه تغییر می دهد. همچنین هیچ عاملی نمی تواند مانع از تغییر کد خارج از برنامه، مانند کد موجود در JDK شود. JDK 5 به عواملی نیاز داشت که در خط فرمان مشخص شوند تا اطمینان حاصل شود که صاحب یک برنامه استفاده از عوامل را تأیید کرده است. با JDK 21، برنامهها نیاز به بارگذاری پویا عاملها را دارند که توسط مالک برنامه تأیید میشوند، درست همانطور که در بارگذاری عوامل در زمان راهاندازی لازم است. این تغییر به طور پیشفرض پلتفرم جاوا را به یکپارچگی نزدیکتر میکند.
- یک API برای مکانیسمهای کپسولهسازی کلید، یک تکنیک رمزگذاری برای ایمن کردن کلیدهای متقارن از طریق رمزنگاری عمومی. یکی از اهداف این پیشنهاد، فعال کردن برنامهها برای استفاده از الگوریتمهای KEM مانند مکانیسم محصور کردن کلید RSA (RSA-KEM)، طرح رمزگذاری یکپارچه منحنی بیضی (ECIES) و الگوریتمهای کاندید برای موسسه ملی استاندارد و فناوری (NIST) است. فرآیند استانداردسازی رمزنگاری کوانتومی هدف دیگر فعال کردن استفاده از KEM ها در پروتکل های سطح بالاتر مانند امنیت لایه حمل و نقل (TLS) و در طرح های رمزنگاری مانند رمزگذاری کلید عمومی ترکیبی (HPKE) است. ارائهدهندگان امنیتی میتوانند الگوریتمهای KEM را در کد جاوا یا کد بومی پیادهسازی کنند و شامل پیادهسازی Diffie-Hellman KEM (DHKEM) تعریفشده در RFC 9180.
- منسوخ شدن پورت x86 32 بیتی Windows برای حذف، با هدف حذف پورت در نسخه آینده این پیشنهاد برای به روز رسانی سیستم ساخت برای صدور یک پیام خطا در هنگام تلاش برای پیکربندی یک ساخت برای ویندوز ۳۲ بیت x86 در نظر گرفته شده است. پیام از طریق یک گزینه پیکربندی جدید قابل سرکوب خواهد بود. همچنین، برنامه این است که پورت و ویژگیهای مربوط به پورت را بهعنوان منسوخ شده برای حذف در اسناد مربوطه علامتگذاری کنیم. این پیشنهاد اشاره می کند که ویندوز ۱۰، آخرین سیستم عامل ویندوز که از عملکرد ۳۲ بیتی پشتیبانی می کند، در اکتبر ۲۰۲۵ به پایان عمر خود می رسد.
- پیشنمایش کلاسهای بینام و روشهای اصلی نمونه، برای تکامل زبان جاوا به طوری که دانشآموزان قادر به نوشتن اولین برنامه های جاوا بدون نیاز به درک ویژگی های زبان طراحی شده برای برنامه های بزرگ هستند. دانش آموزان به دور از استفاده از گویش مجزای جاوا، می توانند اعلان های ساده ای را برای برنامه های تک کلاسی بنویسند و سپس به طور یکپارچه برنامه ها را برای استفاده از ویژگی های پیشرفته تر با رشد مهارت های خود گسترش دهند. این پیشنهاد نه تنها یک راهپیمایی هموار به جاوا ارائه می دهد، بلکه مراسم مربوط به نوشتن برنامه های ساده جاوا مانند اسکریپت ها و ابزارهای خط فرمان را کاهش می دهد.
- پیش نمایشی از الگوها و متغیرهای بی نام. الگوهای بدون نام با یک جزء رکورد مطابقت دارند بدون اینکه نام یا نوع جزء را ذکر کنند، در حالی که متغیرهای بدون نام را می توان مقداردهی اولیه کرد اما استفاده نمی شود. هر دو با یک کاراکتر زیر خط،
_
نشان داده می شوند. این پیشنهاد برای بهبود خوانایی الگوهای رکورد با حذف الگوهای تودرتوی غیر ضروری و بهبود قابلیت نگهداری همه کدها با شناسایی متغیرهایی که باید اعلام شوند اما استفاده نخواهند شد، در نظر گرفته شده است. - ZGC نسل در نظر گرفته شده برای بهبود عملکرد برنامه با گسترش ZGC برای حفظ نسلهای جداگانه برای اشیاء جوان و قدیمی . اشیاء جوان تمایل دارند جوان بمیرند. حفظ نسلهای جداگانه به ZGC اجازه میدهد تا اشیاء جوان را بیشتر جمعآوری کند. برنامههایی که با ZGC نسلی اجرا میشوند باید مزایای زیر را داشته باشند: خطرات پایینتر از توقف تخصیص، سربار حافظه پشته مورد نیاز کمتر و سربار CPU جمعآوری زباله کمتر. این مزایا باید بدون کاهش قابل توجه توان عملیاتی در مقایسه با ZGC غیر نسلی قابل دستیابی باشد.
- الگوهای ضبط، پیشنمایش در JDK 19 و JDK 20، مقادیر رکورد را تجزیه می کند. الگوهای ضبط و الگوهای نوع را می توان برای فعال کردن یک شکل قدرتمند، اعلامی و قابل ترکیب از ناوبری و پردازش داده ها تودرتو کرد. اهداف پیشنهاد شامل گسترش تطبیق الگو به نمونههای تخریب کلاسهای رکورد و افزودن الگوهای تودرتو، امکان پرسوجوهای دادههای قابل ترکیب بیشتر است. این ویژگی با تطبیق الگو برای عبارات و عبارات سوئیچ تکامل یافته است (به زیر مراجعه کنید). پیشنهاد الگوهای رکورد در JEP فعلی (پیشنهاد ارتقای JDK) این ویژگی را با اصلاحات بیشتر بر اساس تجربه و بازخورد مستمر نهایی میکند. جدای از تغییرات جزئی ویرایشی، تغییر اصلی از زمان پیشنمایش دوم حذف پشتیبانی از الگوهای رکوردی است که در سرصفحه یک عبارت بهبودیافته
for
ظاهر میشوند. این ویژگی ممکن است در JEP آینده دوباره پیشنهاد شود. - تطبیق الگوی سوئیچ یک عبارت یا عبارت
switch
را قادر میسازد تا آزمایش شود در برابر تعدادی الگو، که هر کدام دارای یک عمل خاص هستند، به طوری که پرس و جوهای پیچیده داده محور را می توان به طور ایمن و مختصر بیان کرد. این ویژگی ابتدا در JDK 17 پیشنهاد شد و متعاقباً در JDK 18، JDK 19 و JDK 20 اصلاح شد. در JDK 21 با اصلاحات بیشتر بر اساس بازخورد و تجربه نهایی خواهد شد. تغییرات اصلی نسبت به JEP های قبلی حذف الگوهای پرانتز شده و اجازه دادن به ثابت های enum واجد شرایط مانند ثابت های case با عبارات و عباراتswitch
است. اهداف عبارتند از گسترش بیان و کاربرد عبارات و عباراتswitch
با اجازه دادن به الگوها برای ظاهر شدن در برچسبهای حروف، اجازه دادن به خصومت تهی تاریخیswitch
در صورت تمایل کاهش یابد، و افزایش ایمنی عباراتswitch
با الزام به اینکه عبارات الگویswitch
همه مقادیر ورودی بالقوه را پوشش دهد. هدف دیگر این است که اطمینان حاصل شود که عبارات و عباراتswitch
موجود همچنان بدون تغییر کامپایل می شوند و با معنایی یکسان اجرا می شوند. - ششمین انکوباتور از بردار API. این API محاسبات برداری را بیان می کند که به طور قابل اعتمادی به دستورالعمل های برداری بهینه در معماری های پشتیبانی شده CPU کامپایل می شوند و عملکردی برتر از محاسبات اسکالر معادل به دست می آورند. API برداری قبلاً در JDK 16 تا JDK 20 انکوبه شده بود. این جدیدترین نسخه شامل بهبود عملکرد و رفع اشکال است. اهداف پروپوزال عبارتند از: واضح و مختصر بودن، پلتفرم آگنوستیک، و ارائه کامپایل زمان اجرا و عملکرد قابل اعتماد در معماری های x64 و AArch64. اهداف دیگر عبارتند از تخریب برازنده زمانی که یک محاسبات برداری را نمی توان به طور کامل به عنوان دنباله ای از دستورالعمل های برداری بیان کرد.
- سومین پیشنمایش API عملکرد خارجی و حافظه، که برنامههای جاوا را قادر میسازد تا با کد و کد کار کنند داده های خارج از زمان اجرا جاوا این API با فراخوانی کارآمد توابع خارجی و دسترسی ایمن به حافظه خارجی، برنامههای جاوا را قادر میسازد تا کتابخانههای بومی را فراخوانی کنند و دادههای بومی را بدون شکنندگی و خطر JNI (رابط بومی جاوا) پردازش کنند. API قبلاً در JDK 20 و JDK 19 پیشنمایش شده بود. اصلاحات در پیشنمایش JDK 21 شامل مسیرهای طرحبندی پیشرفته با عنصری جدید برای طرحبندی آدرسهای ارجاعدهیشده، مدیریت متمرکز طول عمر بخشهای بومی در
Arena
، پیاده سازی پیوند دهنده بومی بازگشتی، و حذف < code>VaList. اهداف پیشنهادی شامل سهولت استفاده، عملکرد، عمومیت و ایمنی است. اجرای مجدد JNI در بالای این API یا تغییر JNI به هیچ وجه هدف نیست. - رشتههای مجازی رشتههای سبک وزنی هستند که وعده کاهش چشمگیر تلاش برای نوشتن، حفظ و مشاهده بالا را میدهند. برنامه های کاربردی همزمان اهداف این طرح شامل فعال کردن برنامههای کاربردی سرور نوشته شده به سبک ساده رشته به ازای درخواست برای مقیاسبندی با استفاده از سختافزار تقریباً بهینه، فعال کردن کدهای موجود است که از
lang.Thread
API برای استفاده از رشتههای مجازی با حداقل استفاده میکند. تغییرات، و امکان اشکال زدایی آسان و پروفایل رشته های مجازی با ابزارهای JDK فعلی. رشتههای مجازی که قبلاً در JDK 20 و JDK 19 پیشنمایش شده بودند، در JDK 21 نهایی میشوند. با JDK 21، رشتههای مجازی اکنون از متغیرهای thread-local همیشه، و ایجاد رشته های مجازی که این متغیرها را ندارند غیرممکن می کند. پشتیبانی تضمین شده از متغیرهای محلی رشته، تضمین میکند که کتابخانههای موجود بیشتری را میتوان بدون تغییر با رشتههای مجازی استفاده کرد و به انتقال کد وظیفهمحور برای استفاده از رشتههای مجازی کمک میکند. - پیشنهاد مجموعههای متوالی رابطهایی را برای نمایش مجموعهها با ترتیب مواجهه تعریفشده معرفی میکند. هر مجموعه دارای عناصر اول و دوم و غیره تا آخرین عنصر به خوبی تعریف شده است. APIهای یکنواخت برای پذیرش عناصر اول و آخر و پردازش عناصر به ترتیب معکوس ارائه شده است. ایجاد انگیزه پیشنهاد موقعیتی است که در آن جاوا چارچوب مجموعهها فاقد یک نوع مجموعه برای نمایش دنبالهای از عناصر با ترتیب برخورد تعریفشده است. همچنین فاقد مجموعه ای یکنواخت از عملیات است که در این مجموعه ها اعمال شود. این شکاف ها مشکل و منشا شکایت بوده است. این پیشنهاد خواستار تعریف واسطهایی برای توالیبندی مجموعهها، مجموعهها و نقشهها و مقاومسازی این رابطها در سلسله مراتب نوع مجموعههای موجود است. همه این روشهای جدید پیادهسازی پیشفرض دارند.
- الگوهای رشته، یک ویژگی پیشنمایش در JDK 21، با جفت کردن متن تحت اللفظی با عبارات و پردازندههای تعبیهشده برای تولید نتایج تخصصی، متنها و بلوکهای متنی موجود جاوا را تکمیل میکند. این ویژگی زبان و API برای ساده کردن نوشتن برنامه های جاوا با آسان کردن بیان رشته هایی که شامل مقادیر محاسبه شده در زمان اجرا هستند در نظر گرفته شده است. این وعده افزایش خوانایی عبارات، بهبود امنیت برنامه، حفظ انعطافپذیری و سادهسازی استفاده از APIهایی است که رشتههای نوشته شده به زبانهای غیر جاوا را میپذیرند. ایجاد امکان توسعه عبارات غیر رشته ای که از ترکیب متن تحت اللفظی و عبارات جاسازی شده به دست می آیند نیز یک هدف است.
پست های مرتبط
JDK 21: ویژگی های جدید در جاوا ۲۱
JDK 21: ویژگی های جدید در جاوا ۲۱
JDK 21: ویژگی های جدید در جاوا ۲۱