پس از شش ماه توسعه، اوراکل Java SE 27 (پلتفرم جاوا، نسخه استاندارد ۲۳) را منتشر کرده است که از پروژه متنباز OpenJDK به عنوان پیادهسازی مرجع خود استفاده میکند. به استثنای حذف برخی از ویژگیهای منسوخشده، Java SE 27 سازگاری معکوس با نسخههای قبلی پلتفرم جاوا را حفظ میکند - اکثر پروژههای جاوا که قبلاً نوشته شدهاند، هنگام اجرا تحت نسخه جدید بدون تغییر اجرا میشوند. نسخههای آماده نصب Java SE 27 (JDK، JRE و Server JRE) برای ... آماده شدهاند. Linux (x86_64، AArch64)، Windows (x86_64) و macOS (x86_64، AArch64). پیادهسازی مرجع Java SE 27 که توسط پروژه OpenJDK توسعه داده شده است، کاملاً متنباز تحت مجوز GPLv2 با استثنای GNU ClassPath است که امکان پیوند پویا با محصولات تجاری را فراهم میکند.
جاوا SE 27 به عنوان یک نسخه با پشتیبانی منظم طبقهبندی میشود و بهروزرسانیهای آن تا انتشار نسخه بعدی منتشر میشود. شاخه پشتیبانی بلندمدت (LTS) باید Java SE 25، Java SE 21 یا Java SE 17 باشد که بهروزرسانیهای آن به ترتیب تا سالهای 2033، 2031 و 2029 منتشر میشود (به طور کلی تا سپتامبر 2030، 2028 و 2026 در دسترس خواهد بود). پشتیبانی گسترده برای شاخه Java SE 8 LTS تا سال 2030 و برای Java SE 11 تا سال 2032 ادامه خواهد داشت.
تغییرات در Java SE 27 (1، 2، 3، 4) شامل موارد زیر است:
- به طور پیشفرض، همه محیطها از جمعآوریکننده زباله G1 (Garbage-First) استفاده میکنند که قبلاً برای سیستمهای سرور استفاده میشد. G1 برای استفاده در سیستمهای چندپردازندهای با ظرفیت حافظه زیاد و برای متعادل کردن تأخیر قابل پیشبینی با توان عملیاتی بالا بهینه شده است. در حین کار، G1 حافظه را به مناطق کوچک زیادی تقسیم میکند و مناطقی را که اشیاء بلااستفاده بیشتری دارند و دادههای با دسترسی کمتر دارند، در اولویت قرار میدهد.
- ماشین مجازی HotSpot JVM به طور پیشفرض از هدرهای شیء فشرده استفاده میکند. در سیستمهای ۶۴ بیتی، اندازه هدر از ۹۶ به ۶۴ بیت کاهش یافته است که باعث کاهش مصرف حافظه و افزایش احتمال ورود دادهها به حافظه پنهان پردازنده میشود. در معیارهای SPECjbb2015، مصرف حافظه ۲۲٪، بار CPU ۸٪ و تعداد عملیات جمعآوری زباله ۱۵٪ کاهش یافته است. زمان اجرای تست برای تجزیهکننده JSON 10٪ کاهش یافته است.
- پیادهسازی TLS 1.3 پشتیبانی از طرحهای توافق کلید ترکیبی را اضافه میکند که الگوریتم ML-KEM مقاوم در برابر کوانتومی (CRYSTALS-Kyber) را با الگوریتمهای منحنی بیضوی کلاسیک ECDHE ترکیب میکنند: X25519MLKEM768 (ECDHE با منحنی X25519 + ML-KEM-768)، SecP256r1MLKEM76 (ECDHE با منحنی secp256r1 + ML-KEM-768) و SecP384r1MLKEM1024 (ECDHE با منحنی secp384r1 + ML-KEM-1024). در API javax.net.اس اس ال این طرحها به طور پیشفرض فعال هستند و برای استفاده نیازی به تغییر برنامه ندارند.
- ضبطکننده پرواز JDK (JFR)، ابزاری که برای نظارت بر عملکرد، پروفایلبندی و تشخیص استفاده میشود، اکنون از پاکسازی آرگومانهای خط فرمان، مقادیر اولیه متغیرهای محیطی و ویژگیهای سیستم در اطلاعات تشخیصی ذخیره شده پشتیبانی میکند. این تغییر از نشت دادههای حساس پردازش شده توسط فرآیند پروفایلبندی شده، مانند توکنهای مجوز و کلیدهای دسترسی API که از طریق متغیرهای محیطی منتقل میشوند، جلوگیری میکند.
- پیشنمایش سوم API مربوط به Lazy Constants برای کار با اشیاء حاوی دادههای تغییرناپذیر پیادهسازی شده است و در JVM به عنوان ثابت در نظر گرفته میشود. بهینهسازیهای عملکردی مشابه با بهینهسازیهای مربوط به فیلدهای دارای کلمه کلیدی "final" برای چنین اشیاء اعمال میشود. برخلاف "final"، API جدید ایجاد مقادیر ثابت را از مقداردهی اولیه آنها جدا میکند، تضمین میکند که یک مقدار فقط یک بار میتواند مقداردهی اولیه شود، زمان راهاندازی برنامه را کاهش میدهد و امکان استفاده از بهینهسازیهای constant-folding را که قبلاً فقط در کد داخلی JDK استفاده میشدند، در کد کاربر فراهم میکند. class Application { // قبلاً: // static final UserService USERS = new UserService(); // اکنون: static final StableValue USERS = StableValue.of(); متغیر استاتیک عمومی UserService users() { return USERS.orElseSet(UserService::new); } }
- موتور تطبیق الگو، پنجمین پیشنویس از قابلیت استفاده از انواع داده اولیه (int، byte، char و سایر انواع پایه غیر شیء) را در انواع الگوها، در عملگر instanceof و در بلوکهای switch معرفی میکند. switch (x.getStatus()) { case 0 -> "okay"; case 1 -> "warning"; case 2 -> "error"; case int i -> "unknown status: " + i; } if (i instanceof byte b) { … b … }
- هفتمین پیشنویس API همزمانی ساختاریافته، که با در نظر گرفتن چندین وظیفه در حال اجرا روی رشتههای مختلف به عنوان یک واحد واحد، توسعه برنامههای چندرشتهای را ساده میکند، برای آزمایش منتشر شده است.
- دوازدهمین پیادهسازی آزمایشی از Vector API پیادهسازی شده است. این API توابعی را برای محاسبات برداری انجام شده با استفاده از دستورالعملهای برداری پردازنده x86_64 و AArch64 فراهم میکند و امکان عملیات همزمان روی چندین مقدار (SIMD) را فراهم میکند. برخلاف برداریسازی خودکار عملیات اسکالر در کامپایلر HotSpot JIT، API جدید امکان کنترل صریح بر برداریسازی را برای پردازش موازی دادهها فراهم میکند.
- اکنون پیشنویس سوم این API برای رمزگذاری و رمزگشایی اشیاء حاوی کلیدهای رمزنگاری، گواهیها و فهرستهای ابطال گواهی با استفاده از فرمت PEM (Pivacy-Enhanced Mail) در دسترس است.
علاوه بر این، ما مفتخریم که انتشار بهروزرسانی پلتفرم JavaFX 27 برای ایجاد برنامههای رابط کاربری گرافیکی را اعلام کنیم. انتشار ماشین مجازی جهانی GraalVM 27 که از اجرای برنامههای جاوا اسکریپت (Node.js)، پایتون، روبی، R، هر زبان JVM (جاوا، اسکالا، کلوژر، کاتلین) و زبانهایی که بیتکد LLVM برای آنها قابل تولید است (C، C++، Rust) پشتیبانی میکند، نیز در ساعات آینده پیشبینی میشود.
منبع: opennet.ru
