پس از شش ماه توسعه، اوراکل جاوا SE 18 (پلتفرم جاوا، نسخه استاندارد 18) را منتشر کرد که از پروژه منبع باز OpenJDK به عنوان پیاده سازی مرجع استفاده می کند. به استثنای حذف برخی از ویژگیهای منسوخ، Java SE 18 سازگاری با نسخههای قبلی پلتفرم جاوا را حفظ میکند - اکثر پروژههای جاوا که قبلاً نوشته شدهاند، در صورت اجرا تحت نسخه جدید بدون تغییر کار میکنند. بیلدهای آماده برای نصب جاوا SE 18 (JDK، JRE و سرور JRE) برای لینوکس (x86_64، AArch64)، ویندوز (x86_64) و macOS (x86_64، AArch64) آماده شده اند. پیاده سازی مرجع جاوا 18 که توسط پروژه OpenJDK توسعه یافته است، کاملاً منبع باز تحت مجوز GPLv2 است، با استثناهای GNU ClassPath که امکان پیوند پویا با محصولات تجاری را فراهم می کند.
جاوا SE 18 به عنوان نسخه پشتیبانی معمولی طبقه بندی می شود و تا نسخه بعدی به دریافت به روز رسانی ها ادامه خواهد داد. شعبه پشتیبانی طولانی مدت (LTS) باید جاوا SE 17 باشد که تا سال 2029 به دریافت به روز رسانی ادامه خواهد داد. یادآوری می کنیم که با شروع انتشار جاوا 10، این پروژه به یک فرآیند توسعه جدید تبدیل شد که به معنای چرخه کوتاه تری برای شکل گیری نسخه های جدید است. عملکرد جدید اکنون در یک شاخه اصلی که دائماً بهروز میشود، توسعه مییابد که شامل تغییرات آماده است و شاخهها هر شش ماه یکبار برای تثبیت نسخههای جدید منشعب میشوند.
ویژگی های جدید جاوا 18 عبارتند از:
- رمزگذاری پیش فرض UTF-8 است. API های جاوا که داده های متنی را بر اساس رمزگذاری کاراکتر پردازش می کنند، اکنون بدون در نظر گرفتن تنظیمات سیستم و تنظیمات محلی، از UTF-8 به طور پیش فرض در همه پلتفرم ها استفاده می کنند. برای بازگشت به رفتار قبلی، جایی که رمزگذاری بر اساس منطقه سیستم انتخاب می شود، می توانید از گزینه "-Dfile.encoding=COMPAT" استفاده کنید.
- این بسته شامل بسته com.sun.net.httpserver است که شامل ابزار jwebserver و API کتابخانه با پیاده سازی یک سرور http ساده برای ارائه محتوای استاتیک است (CGI و کنترل کننده های سرور مانند پشتیبانی نمی شوند). سرور HTTP داخلی برای بارهای کاری بهینه سازی نشده است و از کنترل دسترسی و احراز هویت پشتیبانی نمی کند، زیرا هدف اصلی آن استفاده در فرآیند توسعه برای نمونه سازی، اشکال زدایی و آزمایش پروژه ها است.
- JavaDoc از تگ "@snippet" پشتیبانی می کند تا نمونه های کاری و قطعه کد را در اسناد API جاسازی کند، جایی که می توانید از ابزارهای اعتبار سنجی، برجسته سازی نحو و ادغام IDE استفاده کنید.
- اجرای java.lang.reflect API (Core Reflection) که برای به دست آوردن اطلاعات در مورد روش ها، فیلدها و سازنده کلاس ها و همچنین دسترسی به ساختار داخلی کلاس ها طراحی شده است، دوباره طراحی شده است. خود java.lang.reflect API بدون تغییر باقی میماند، اما اکنون با استفاده از دستههای متد ارائهشده توسط ماژول java.lang.invoke، به جای استفاده از تولیدکنندههای بایت کد پیادهسازی میشود. این تغییر به ما اجازه داد تا پیاده سازی های java.lang.reflect و java.lang.invoke را یکپارچه کنیم و نگهداری آنها را ساده کنیم.
- سومین پیشنمایش از Vector API پیشنهاد شده است، که توابعی را برای محاسبات برداری ارائه میکند که با استفاده از دستورالعملهای برداری در پردازندههای x86_64 و AArch64 اجرا میشوند و اجازه میدهند عملیاتها به طور همزمان روی مقادیر متعدد (SIMD) اعمال شوند. برخلاف قابلیت های ارائه شده در کامپایلر HotSpot JIT برای بردارسازی خودکار عملیات اسکالر، API جدید امکان کنترل صریح بردارسازی برای پردازش موازی داده را فراهم می کند.
- افزودن رابط SPI (رابط ارائه دهنده خدمات) برای حل نام هاست و آدرس های IP، به شما این امکان را می دهد که از حل کننده های جایگزین در java.net.InetAddress استفاده کنید که به کنترل کننده های ارائه شده توسط سیستم عامل مرتبط نیستند.
- دومین پیشنمایش از خارجی Function & Memory API ارائه شده است که به برنامهها اجازه میدهد با کد و دادههای خارج از زمان اجرا جاوا تعامل داشته باشند. API جدید به شما این امکان را میدهد تا به طور موثر توابع غیر JVM را فراخوانی کنید و به حافظههای غیر مدیریتشده JVM دسترسی داشته باشید. برای مثال، میتوانید توابع را از کتابخانههای مشترک خارجی فراخوانی کنید و بدون استفاده از JNI به دادههای فرآیند دسترسی داشته باشید.
- دومین اجرای آزمایشی تطبیق الگو در عبارات "سوئیچ" اضافه شده است که به جای مقادیر دقیق، امکان استفاده از الگوهای انعطاف پذیر در برچسب های "مورد" را فراهم می کند، که مجموعه ای از مقادیر را به طور همزمان پوشش می دهد، که قبلاً برای آنها استفاده می شد. زنجیره های دست و پا گیر عبارات «اگر...دیگر». شی o = 123L; String formatted = switch (o) { 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(); };
- مکانیسم نهایی سازی و روش های مرتبط با آن مانند Object.finalize()، Enum.finalize()، Runtime.runFinalization() و System.runFinalization() منسوخ شده اند و در نسخه های بعدی غیرفعال خواهند شد.
- ZGC (Z Garbage Collector)، SerialGC، و ParallelGC زباله جمعآوری از تکرار ردیف پشتیبانی میکنند.
منبع: opennet.ru