إصدار منصة Java SE 22 وتنفيذ المرجع المفتوح OpenJDK 22

بعد ستة أشهر من التطوير ، أصدرت Oracle منصة Java SE 22 (Java Platform، Standard Edition 22) ، والتي تستخدم مشروع OpenJDK مفتوح المصدر كتطبيق مرجعي. باستثناء إزالة بعض الميزات المهملة ، يحافظ Java SE 22 على التوافق مع الإصدارات السابقة مع الإصدارات السابقة من نظام Java الأساسي - ستظل معظم مشاريع Java المكتوبة مسبقًا تعمل بدون تعديل عند تشغيلها في الإصدار الجديد. تم إعداد تصميمات Java SE 22 القابلة للتثبيت (JDK و JRE و Server JRE) لأنظمة Linux (x86_64 و AArch64) و Windows (x86_64) و macOS (x86_64، AArch64). تم تطوير تطبيق Java 22 المرجعي بواسطة مشروع OpenJDK ، وهو مفتوح المصدر بالكامل بموجب ترخيص GPLv2 مع استثناءات GNU ClassPath للسماح بالربط الديناميكي بالمنتجات التجارية.

تم تصنيف Java SE 22 كإصدار دعم منتظم وسيستمر في تلقي التحديثات حتى الإصدار التالي. يجب أن يكون فرع الدعم طويل الأمد (LTS) هو Java SE 21 أو Java SE 17، والذي سيتلقى التحديثات حتى 2031 و2029 على التوالي (متاح بشكل عام حتى 2028 و2026). انتهى الدعم العام لفرع LTS من Java SE 11 في سبتمبر الماضي، لكن الدعم الممتد سيستمر حتى عام 2032. سيستمر الدعم الموسع لفرع LTS من Java SE 8 حتى عام 2030.

أذكرك أنه بدءا من إصدار Java 10، تحول المشروع إلى عملية تطوير جديدة، مما يعني دورة أقصر لتشكيل إصدارات جديدة. يتم الآن تطوير الوظائف الجديدة في فرع رئيسي واحد يتم تحديثه باستمرار، والذي يتضمن تغييرات جاهزة ويتم تفرع منه الفروع كل ستة أشهر لتحقيق استقرار الإصدارات الجديدة.

تشمل الميزات الجديدة في Java 22 ما يلي:

  • يتضمن جامع البيانات المهملة G1 دعمًا لتثبيت المنطقة، والذي يسمح لك بإصلاح موقع كائنات Java في الذاكرة مؤقتًا لتجنب نقلها بواسطة جامع البيانات المهملة والسماح بتمرير المراجع إلى هذه الكائنات بأمان بين Java والتعليمات البرمجية الأصلية. يتيح لك التثبيت تقليل زمن الوصول وتجنب تعطيل جمع البيانات المهملة عند تنفيذ المناطق الحرجة من JNI (واجهة Java الأصلية) باستخدام التعليمات البرمجية الأصلية (أثناء تنفيذ هذه الأقسام، يجب ألا يقوم JVM بنقل الكائنات المهمة المرتبطة بها لتجنب حالات السباق). يؤدي التثبيت إلى إزالة الكائنات الهامة من عرض أداة تجميع البيانات المهملة، والتي يمكنها الاستمرار في تنظيف المناطق غير المثبتة.
  • تمت إضافة ميزة أولية للسماح بتحديد التعبيرات في المُنشئات قبل استدعاء super(...)، وتستخدم لاستدعاء مُنشئ فئة أصل بشكل صريح من مُنشئ فئة موروث إذا كانت تلك التعبيرات لا تشير إلى مثيل تم إنشاؤه بواسطة المُنشئ. class Outer { void hello() { System.out.println("Hello"); } class Inner { Inner() { hello(); ممتاز()؛ } } }
  • تم تثبيت واجهة برمجة التطبيقات FFM (الوظيفة الخارجية والذاكرة)، مما يسمح بتفاعل برامج Java مع التعليمات البرمجية والبيانات الخارجية عن طريق استدعاء الوظائف من المكتبات الخارجية والوصول إلى الذاكرة خارج JVM، دون اللجوء إلى استخدام JNI (Java Native Interface).
  • تم تمكين دعم المتغيرات غير المسماة ومطابقة الأنماط - بدلاً من المتغيرات والأنماط غير المستخدمة ولكن الضرورية عند الاتصال، يمكنك الآن تحديد الحرف "_". // كان String pageName = Switch (page) { case GitHubIssuePage(var url, var content, var links, int IssueNumber) -> "ISSUE #" + IssueNumber; ... }; // يمكنك الآن String pageName = Switch (page) { case GitHubIssuePage(_, _, _, int IssueNumber) -> "ISSUE #" + IssueNumber; };
  • يُقترح التنفيذ الأولي لواجهة برمجة تطبيقات Class-File لتحليل ملفات فئة Java وإنشائها وتحويلها. ClassFile cf = ClassFile.of(); ClassModel classModel = cf.parse(bytes); byte[] newBytes = cf.build(classModel.thisClass().asSymbol(), classBuilder -> { for (ClassElement ce : classModel) { if (!(ce مثيل of MethodModel mm && mm.methodName().stringValue(). startWith("debug"))) { classBuilder.with(ce); } } });
  • توفر أداة Java المساعدة القدرة على تشغيل برامج Java، المتوفرة في شكل عدة ملفات تعليمات برمجية أو مكتبات فئات مجمعة مسبقًا، دون تجميع هذه الملفات بشكل منفصل ودون تكوين نظام البناء. تعمل الميزة الجديدة على تسهيل تشغيل البرامج التي يتم فيها فصل أكواد الفئات المختلفة إلى ملفات منفصلة. Prog.java: class Prog { public static void main(String[] args) { Helper.run(); } } Helper.java: class Helper { static void run() { System.out.println("Hello!"); } }

    على سبيل المثال، لتشغيل برنامج يتكون من ملفين "Prog.java" و"Helper.java"، يكفي الآن تشغيل "java Prog.java"، الذي سيقوم بتجميع فئة Prog، وتحديد مرجع لفئة Helper، ابحث عن ملف Helper.java وقم بتجميعه واستدعاء الطريقة الرئيسية.

  • تمت إضافة التنفيذ الأولي الثاني لقوالب السلسلة، والذي تم تنفيذه بالإضافة إلى سلسلة حرفية وكتل نصية. تسمح لك قوالب السلسلة بدمج النص مع التعبيرات والمتغيرات المحسوبة دون استخدام عامل التشغيل +. يتم تنفيذ استبدال التعبيرات باستخدام البدائل \{..}، ويمكن توصيل معالجات خاصة للتحقق من صحة القيم المستبدلة. على سبيل المثال، يتحقق محرك SQL من القيم التي يتم استبدالها في كود SQL ويعيد كائن java.sql.Statement كمخرجات، بينما يراقب معالج JSON صحة بدائل JSON ويعيد JsonNode. استعلام السلسلة = "SELECT * FROM Person p WHERE p." + property + " = '" + value + "'"؛ // كان استعلام البيان = SQL."""SELECT * FROM Person p WHERE p.\{property} = '\{value}'"""; // أصبح
  • تمت إضافة المعاينة السابعة لـ Vector API، مما يوفر وظائف لحسابات المتجهات التي يتم إجراؤها باستخدام تعليمات المتجهات على معالجات x86_64 و AArch64 وتسمح بتطبيق العمليات في وقت واحد على قيم متعددة (SIMD). على عكس الإمكانات المتوفرة في برنامج التحويل البرمجي HotSpot JIT للتوجيه التلقائي للعمليات العددية، تتيح واجهة برمجة التطبيقات الجديدة التحكم بشكل صريح في التوجيه لمعالجة البيانات المتوازية.
  • تمت إضافة تطبيق أولي لواجهة برمجة التطبيقات Stream API الموسعة التي تدعم تحديد العمليات الوسيطة الخاصة بك، والتي قد تكون مفيدة في الحالات التي لا تكون فيها العمليات الوسيطة المضمنة الحالية كافية لتحويل البيانات المطلوبة. يتم توصيل المعالجات الأصلية باستخدام العملية الوسيطة الجديدة Stream::gather(Gatherer)، التي تعالج عناصر الدفق من خلال تطبيق معالج محدد من قبل المستخدم عليها. jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList() $1 ==> [[1, 2, 3], [4، 5، 6]، [7، 8، 9]]
  • تم اقتراح إصدار ثانٍ من واجهة برمجة التطبيقات التجريبية للتزامن المنظم للاختبار، مما يبسط تطوير التطبيقات متعددة الخيوط من خلال معالجة مهام متعددة يتم تنفيذها في سلاسل رسائل مختلفة ككتلة واحدة.
  • تمت إضافة تطبيق أولي ثانٍ للفئات المعلن عنها ضمنيًا والمثيلات غير المسماة للطريقة "الرئيسية"، والتي يمكنها الاستغناء عن الإعلانات العامة/الثابتة، وتمرير مجموعة من الوسائط، والكيانات الأخرى المرتبطة بإعلان الفئة. // كان public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } // الآن يمكنك إفراغ main() { System.out.println("Hello, World!"); }
  • تمت إضافة تنفيذ معاينة ثانٍ للقيم ذات النطاق، مما يسمح بمشاركة البيانات غير القابلة للتغيير عبر سلاسل الرسائل وتبادل البيانات بكفاءة بين سلاسل الرسائل الفرعية (يتم توريث القيم). يتم تطوير القيم المحددة لتحل محل آلية المتغيرات المحلية لمؤشر الترابط وتكون أكثر كفاءة عند استخدام أعداد كبيرة جدًا من سلاسل الرسائل الافتراضية (الآلاف أو الملايين من سلاسل الرسائل). يتمثل الاختلاف الرئيسي بين القيم المحددة والمتغيرات المحلية لسلسلة الرسائل في أن الأولى تتم كتابتها مرة واحدة، ولا يمكن تغييرها في المستقبل، وتظل متاحة فقط طوال مدة تنفيذ سلسلة الرسائل.
  • قام مجمع البيانات المهملة Parallel بتحسين الأداء عند العمل مع صفائف كبيرة من الكائنات. أتاح التحسين في بعض الاختبارات التي تحتوي على مصفوفات كبيرة من الكائنات تقليل التأخير قبل البدء في البحث عن كائن بنسبة 20%.

بالإضافة إلى ذلك، يمكنك ملاحظة نشر تحديث لمنصة إنشاء التطبيقات ذات الواجهة الرسومية JavaFX 22.

المصدر: opennet.ru

إضافة تعليق