إصدار Java SE 16

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

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

استعدادًا للإصدار الجديد، انتقل التطوير من نظام التحكم في الإصدار Mercurial إلى Git ومنصة التطوير التعاوني GitHub. من المتوقع أن يؤدي الترحيل إلى تحسين أداء عمليات المستودع، وزيادة كفاءة التخزين، وتوفير الوصول إلى التغييرات طوال تاريخ المشروع، وتحسين الدعم لمراجعة التعليمات البرمجية، وتمكين واجهات برمجة التطبيقات (APIs) لأتمتة سير العمل. بالإضافة إلى ذلك، فإن استخدام Git وGitHub يجعل المشروع أكثر جاذبية للمبتدئين والمطورين المعتادين على Git.

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

  • تمت إضافة الوحدة التجريبية jdk.incubator.vector مع تطبيق Vector API، والذي يوفر وظائف لحسابات المتجهات التي يتم إجراؤها باستخدام تعليمات المتجهات على معالجات x86_64 وAArch64 وتسمح بتطبيق العمليات في وقت واحد على قيم متعددة (SIMD). على النقيض من الإمكانات المتوفرة في برنامج التحويل البرمجي HotSpot JIT للتوزيع التلقائي للعمليات العددية، تسمح لك واجهة برمجة التطبيقات الجديدة بالتحكم بشكل صريح في التوجيه لمعالجة البيانات المتوازية.
  • يُسمح لكود JDK وVM HotSpot المكتوب بلغة C++ باستخدام الميزات المقدمة في مواصفات C++14. في السابق، كان مسموحًا بمعايير C++ 98/03.
  • أضاف ZGC (Z Garbage Collector)، الذي يعمل في الوضع السلبي ويقلل من التأخير الناتج عن جمع البيانات المهملة قدر الإمكان، القدرة على معالجة مكدسات الخيوط بالتوازي دون إيقاف سلاسل رسائل التطبيق مؤقتًا. لدى ZGC الآن فقط العمل الذي يتطلب التعليق، والذي يحتوي على تأخيرات مستمرة، لا تتجاوز عادة بضع مئات من الميكروثانية.
  • تمت إضافة دعم لمآخذ توصيل Unix (AF_UNIX) إلى فئات JackChannel وServerSocketChannel وjava.nio.channels.
  • تم تنفيذ منفذ لتوزيع Linux Alpine مع مكتبة C القياسية musl، والتي تحظى بشعبية كبيرة في بيئات الحاويات والخدمات الصغيرة والسحابة والأنظمة المدمجة. يتيح لك المنفذ المقترح في مثل هذه البيئات تشغيل برامج Java مثل التطبيقات العادية. بالإضافة إلى ذلك، باستخدام jlink، يمكنك إزالة جميع الوحدات غير المستخدمة وإنشاء بيئة بسيطة كافية لتشغيل التطبيق، مما يسمح لك بإنشاء صور مضغوطة خاصة بالتطبيق.
  • تم تنفيذ آلية Elastic Metaspace لتحسين عمليات تخصيص وإرجاع الذاكرة التي تشغلها البيانات الوصفية للفئة (مساحة التعريف) في JVM HotSpot. يؤدي استخدام Elastic Metaspace إلى تقليل تجزئة الذاكرة، وتقليل الحمل الزائد لمحمل الفئة، كما أن له تأثيرًا مفيدًا على أداء تطبيقات الخادم طويلة الأمد بسبب الإرجاع السريع للذاكرة التي تشغلها بيانات تعريف الفئة غير المستخدمة إلى نظام التشغيل. لتحديد وضع تحرير الذاكرة بعد إلغاء تحميل الفئات، يتم تقديم الخيار "-XX:MetaspaceReclaimPolicy=(balanced|aggressive|none)".
  • تمت إضافة منفذ JDK لأنظمة Windows التي تعمل على أجهزة ذات معالجات تعتمد على بنية AArch64.
  • تم اقتراح معاينة ثالثة لواجهة برمجة تطبيقات الوصول إلى الذاكرة الخارجية، مما يسمح لتطبيقات Java بالوصول بشكل آمن وفعال إلى مناطق الذاكرة خارج كومة Java عن طريق معالجة تجريدات MemorySegment وMemoryAddress وMemoryLayout الجديدة.
  • تم تنفيذ واجهة برمجة التطبيقات التجريبية للرابط الأجنبي، مما يوفر الوصول من Java إلى التعليمات البرمجية الأصلية. جنبًا إلى جنب مع واجهة برمجة تطبيقات الذاكرة الخارجية، تعمل واجهة البرمجة الجديدة على تسهيل إنشاء أغلفة على المكتبات المشتركة التقليدية.
  • تمت إضافة الأداة المساعدة jpackage، والتي تتيح لك إنشاء حزم لتطبيقات Java المستقلة. تعتمد الأداة على javapackager من JavaFX وتسمح لك بإنشاء حزم بتنسيقات أصلية لمنصات مختلفة (msi وexe لنظام التشغيل Windows، وpkg وdmg لنظام التشغيل macOS، وdeb وrpm لنظام التشغيل Linux). تتضمن الحزم جميع التبعيات المطلوبة.
  • يتم تمكين التغليف الصارم لجميع مكونات JDK الداخلية افتراضيًا، باستثناء واجهات برمجة التطبيقات الهامة مثل sun.misc.Unsafe. تم الآن تعيين قيمة خيار "--illegal-access" على "deny" بدلاً من "permit" افتراضيًا، مما سيمنع محاولات التعليمات البرمجية للوصول إلى معظم الفئات والأساليب والحقول الداخلية. لتجاوز التقييد، استخدم خيار "-illegal-access=permit".
  • تم تثبيت تنفيذ مطابقة النمط في عامل التشغيل "instanceof"، مما يسمح لك بتحديد متغير محلي على الفور للإشارة إلى القيمة المحددة. على سبيل المثال، يمكنك على الفور كتابة "if (obj مثيل String s && s.length() > 5) {.. s.contains(..) ..}" دون تحديد "String s = (String) obj" بشكل صريح. كان: if (obj exampleof Group) { Group group = (Group) obj; إدخالات فار = group.getEntries(); } يمكنك الآن الاستغناء عن تحديد "Group group = (Group) obj": if (obj مثيل لمجموعة المجموعة) { var inputs = group.getEntries(); }
  • تم تثبيت تنفيذ الكلمة الأساسية "record"، مما يوفر نموذجًا مضغوطًا لتعريفات الفئة مما يلغي الحاجة إلى تعريف مختلف الأساليب ذات المستوى المنخفض بشكل صريح مثلequals() و hashCode() و toString() في الحالات التي يتم فيها تخزين البيانات فقط في المجالات التي لا يتغير بها. عندما يستخدم الفصل تطبيقات قياسية لطرق يساوي () و hashCode () و toString ()، فيمكنه الاستغناء عن تعريفها الصريح: السجل العام BankTransaction(LocalDate date, doubleقدار, String description) {}

    سيضيف هذا الإعلان تلقائيًا تطبيقات للطرق يساوي () و hashCode () و toString () بالإضافة إلى أساليب المنشئ و getter.

  • تم اقتراح مسودة ثانية للفئات والواجهات المختومة التي لا يمكن استخدامها بواسطة الفئات والواجهات الأخرى لوراثة التطبيقات أو توسيعها أو تجاوزها. توفر الفئات المختومة أيضًا طريقة أكثر تصريحًا لتقييد استخدام الفئة الفائقة من معدّلات الوصول، استنادًا إلى القائمة الصريحة للفئات الفرعية المسموح لها بالامتداد. الحزمة com.example.geometry; فئة عامة مختومة يسمح الشكل بـ com.example.polar.Circle، com.example.quad.Rectangle، com.example.quad.simple.Square {…}

المصدر: opennet.ru

إضافة تعليق