پس از شش ماه توسعه، اوراکل جاوا SE 20 (پلتفرم جاوا، نسخه استاندارد 20) را منتشر کرد که از پروژه منبع باز OpenJDK به عنوان پیاده سازی مرجع استفاده می کند. به استثنای حذف برخی از ویژگیهای منسوخ، Java SE 20 سازگاری با نسخههای قبلی پلتفرم جاوا را حفظ میکند - اکثر پروژههای جاوا که قبلاً نوشته شدهاند، در صورت اجرا تحت نسخه جدید بدون تغییر کار میکنند. بیلدهای آماده برای نصب جاوا SE 20 (JDK، JRE و سرور JRE) برای لینوکس (x86_64، AArch64)، ویندوز (x86_64) و macOS (x86_64، AArch64) آماده شده اند. پیاده سازی مرجع جاوا 20 که توسط پروژه OpenJDK توسعه یافته است، کاملاً منبع باز تحت مجوز GPLv2 است، با استثناهای GNU ClassPath که امکان پیوند پویا با محصولات تجاری را فراهم می کند.
جاوا SE 20 به عنوان نسخه پشتیبانی معمولی طبقه بندی می شود و تا نسخه بعدی به دریافت به روز رسانی ها ادامه خواهد داد. شعبه پشتیبانی طولانی مدت (LTS) باید جاوا SE 17 باشد که تا سال 2029 به دریافت به روز رسانی ادامه خواهد داد. یادآوری می کنیم که با شروع انتشار جاوا 10، این پروژه به یک فرآیند توسعه جدید تبدیل شد که به معنای چرخه کوتاه تری برای شکل گیری نسخه های جدید است. عملکرد جدید اکنون در یک شاخه اصلی که دائماً بهروز میشود، توسعه مییابد که شامل تغییرات آماده است و شاخهها هر شش ماه یکبار برای تثبیت نسخههای جدید منشعب میشوند.
ویژگی های جدید جاوا 20 عبارتند از:
- پشتیبانی اولیه از Scoped Values وجود دارد که به دادههای تغییرناپذیر اجازه میدهد بین رشتهها به اشتراک گذاشته شود و دادهها به طور موثر بین رشتههای فرزند رد و بدل شوند (مقادیر به ارث میرسند). Scoped Values برای جایگزینی مکانیسم متغیرهای thread-local در حال توسعه هستند و هنگام استفاده از تعداد بسیار زیادی از رشته های مجازی (هزاران یا میلیون ها رشته) کارآمدتر هستند. تفاوت اصلی بین مقادیر Scoped و متغیرهای thread-local این است که اولی یک بار نوشته می شود، در آینده قابل تغییر نیست و فقط برای مدت اجرای thread در دسترس باقی می ماند. class Server { نهایی static ScopedValue CURRENT_USER = new ScopedValue(); void serve(درخواست درخواست، پاسخ پاسخ) { var level = (درخواست. isAuthorized()? ADMIN : GUEST); var user = کاربر جدید (سطح); ScopedValue.where(CURRENT_USER، کاربر).run(() -> Application.handle(درخواست، پاسخ)); } } class DatabaseManager { DBConnection open() { var user = Server.CURRENT_USER.get(); اگر (!user.canOpen()) جدید InvalidUserException را پرتاب کند. DBConnection جدید را برگردانید (...); } }
- پیشنمایش دومی از الگوهای رکورد اضافه شده است که ویژگی تطبیق الگوی معرفی شده در جاوا 16 را برای تجزیه مقادیر کلاسهای رکورد گسترش میدهد. به عنوان مثال: رکورد Point(int x, int y) {} static void printSum(object obj) { if (obj instanceof Point p) { int x = px(); int y = py(); System.out.println(x+y); } }
- چهارمین اجرای مقدماتی تطبیق الگو در عبارات "سوئیچ" اضافه شده است که به برچسب های "case" اجازه می دهد تا از مقادیر دقیق استفاده نکنند، بلکه از الگوهای انعطاف پذیری استفاده کنند که مجموعه ای از مقادیر را به طور همزمان پوشش می دهند، که قبلاً برای آنها استفاده دست و پا گیر ضروری بود. زنجیره ای از عبارات "اگر...دیگر". static String formatterPatternSwitch(Object Obj) { return switch (obj) { case Integer i -> String.format("int %d", i); case Long l -> String.format("long %d", l); case Double d -> String.format("double %f", d); case String s -> String.format("String %s", s); پیش فرض -> o.toString(); }; }
- دومین اجرای مقدماتی API FFM (عملکرد و حافظه خارجی) اضافه شده است که به شما امکان می دهد تعامل برنامه های جاوا را با کد و داده های خارجی از طریق فراخوانی توابع از کتابخانه های خارجی و دسترسی به حافظه خارج از JVM سازماندهی کنید.
- پیشنمایش دومی از رشتههای مجازی اضافه شده است، که رشتههای سبک وزنی هستند که نوشتن و حفظ برنامههای چند رشتهای با کارایی بالا را بسیار ساده میکنند.
- یک API آزمایشی دوم برای موازی سازی ساختاریافته اضافه شد، که توسعه برنامه های کاربردی چند رشته ای را با استفاده از چندین کار در حال اجرا در رشته های مختلف به عنوان یک بلوک ساده ساده می کند.
- پنجمین پیشنمایش Vector API اضافه شده است، که توابعی را برای محاسبات برداری ارائه میکند که با استفاده از دستورالعملهای برداری در پردازندههای x86_64 و AArch64 انجام میشوند و امکان اعمال همزمان عملیات بر روی چندین مقدار (SIMD) را فراهم میکنند. برخلاف قابلیت های ارائه شده در کامپایلر HotSpot JIT برای بردارسازی خودکار عملیات اسکالر، API جدید امکان کنترل صریح بردارسازی برای پردازش موازی داده را فراهم می کند.
منبع: opennet.ru