أصدرت Oracle إصدارًا جديدًا من Java باسم Java 8 في 18 مارس 2014. وكان إصدارًا ثوريًا لمنصة Java لتطوير البرمجيات. يتضمن ترقيات مختلفة لبرمجة Java وJVM والأدوات والمكتبات.
تحسينات لغة البرمجة جافا 8
يوفر Java 8 الميزات التالية لبرمجة Java:
- تعبيرات لامدا,
- مراجع الطريقة،
- واجهات وظيفية،
- دفق API,
- الطرق الافتراضية
- فك تشفير Base64,
- الأساليب الثابتة في الواجهة،
- فئة اختيارية،
- فئة جامعي,
- طريقة ForEach () ،
- وحيد القرن محرك جافا سكريبت,
- فرز المصفوفة الموازية,
- اكتب التعليقات التوضيحية وكررها،
- تحسينات الإدخال والإخراج،
- تحسينات التزامن،
- تحسينات JDBC وما إلى ذلك.
تعبيرات لامدا
يساعدنا تعبير Lambda على كتابة التعليمات البرمجية الخاصة بنا بأسلوب وظيفي. فهو يوفر طريقة واضحة وموجزة لتنفيذ واجهة SAM (طريقة مجردة واحدة) باستخدام تعبير. إنه مفيد جدًا في مكتبة المجموعات حيث يساعد في تكرار البيانات وتصفيتها واستخراجها.
لمزيد من المعلومات والأمثلة: انقر هنا
مراجع الطريقة
يتم استخدام مرجع طريقة Java 8 للإشارة إلى طريقة الواجهة الوظيفية. إنه شكل مضغوط وسهل من تعبير لامدا. في كل مرة تستخدم فيها تعبير lambda لإحالة طريقة ما فقط، يمكنك استبدال تعبير lambda الخاص بك بمرجع الطريقة.
لمزيد من المعلومات والأمثلة: انقر هنا
واجهة وظيفية
تُعرف الواجهة التي تحتوي على طريقة مجردة واحدة فقط بالواجهة الوظيفية. يمكن أن يحتوي على أي عدد من الأساليب الافتراضية والثابتة. ويمكنه أيضًا الإعلان عن أساليب فئة الكائن.
تُعرف الواجهات الوظيفية أيضًا باسم واجهات الطريقة المجردة الفردية (واجهات SAM).
لمزيد من المعلومات والأمثلة: انقر هنا
خياري
قدمت Java فئة جديدة اختيارية في Java 8. وهي فئة نهائية عامة تُستخدم للتعامل مع NullPointerException في تطبيق Java. يجب علينا الاستيراد java.util الحزمة لاستخدام هذه الفئة. ويوفر طرقًا للتحقق من وجود قيمة لمتغير معين.
لمزيد من المعلومات والأمثلة: انقر هنا
لكل
توفر Java طريقة جديدة forEach() لتكرار العناصر. يتم تعريفه في واجهات Iterable وStream.
إنها طريقة افتراضية محددة في الواجهة القابلة للتكرار. يمكن لفئات المجموعة التي تعمل على توسيع الواجهة القابلة للتكرار استخدام طريقة forEach() لتكرار العناصر.
تأخذ هذه الطريقة معلمة واحدة وهي واجهة وظيفية. لذلك، يمكنك تمرير تعبير لامدا كوسيطة.
لمزيد من المعلومات والأمثلة: انقر هنا
واجهة برمجة تطبيقات التاريخ/الوقت
قدمت Java واجهة برمجة تطبيقات جديدة للتاريخ والوقت منذ Java 8. تحتوي حزمة java.time على فئات Java 8 للتاريخ والوقت.
لمزيد من المعلومات والأمثلة: انقر هنا
الأساليب الافتراضية
توفر Java وسيلة لإنشاء طرق افتراضية داخل الواجهة. تُعرف الطرق التي يتم تعريفها داخل الواجهة والتي تم وضع علامة عليها باستخدام الكلمة الأساسية الافتراضية بالطرق الافتراضية. هذه الأساليب هي طرق غير مجردة ويمكن أن يكون لها نص الطريقة.
لمزيد من المعلومات والأمثلة: انقر هنا
وحيد القرن محرك جافا سكريبت
Nashorn هو محرك جافا سكريبت. يتم استخدامه لتنفيذ كود JavaScript ديناميكيًا في JVM (Java Virtual Machine). توفر Java أداة سطر الأوامر إلخ والذي يستخدم لتنفيذ كود جافا سكريبت.
يمكنك تنفيذ تعليمات JavaScript البرمجية بطريقتين:
- باستخدام أداة سطر الأوامر jjs، و
- عن طريق التضمين في كود مصدر Java.
لمزيد من المعلومات والأمثلة: انقر هنا
StringJoiner
أضافت Java فئة نهائية جديدة StringJoiner في حزمة java.util. يتم استخدامه لإنشاء سلسلة من الأحرف مفصولة بمحدد. الآن، يمكنك إنشاء سلسلة عن طريق تمرير محددات مثل الفاصلة (،) والواصلة (-) وما إلى ذلك.
مفاتيح التعديل
لمزيد من المعلومات والأمثلة: انقر هنا
جامعي
Collectors هي فئة نهائية تعمل على توسيع فئة الكائن. يوفر عمليات الاختزال، مثل تجميع العناصر في مجموعات، وتلخيص العناصر وفقًا لمعايير مختلفة وما إلى ذلك.
لمزيد من المعلومات والأمثلة: انقر هنا
دفق API
تتكون حزمة Java 8 java.util.stream من فئات وواجهات وتعداد للسماح بعمليات النمط الوظيفي على العناصر. ينفذ عملية حسابية كسولة. لذا فهو لا ينفذ إلا عندما يتطلب الأمر ذلك.
لمزيد من المعلومات والأمثلة: انقر هنا
مرشح الدفق
يوفر دفق Java طريقة filter() لتصفية عناصر الدفق على أساس المسند المحدد. لنفترض أنك تريد الحصول على عناصر متساوية فقط من قائمتك، يمكنك القيام بذلك بسهولة بمساعدة طريقة التصفية ().
تأخذ هذه الطريقة المسند كوسيطة وتقوم بإرجاع دفق من العناصر الناتجة.
لمزيد من المعلومات والأمثلة: انقر هنا
تشفير وفك تشفير Java Base64
توفر Java فئة Base64 للتعامل مع التشفير وفك التشفير. تحتاج إلى استيراد فئة java.util.Base64 في ملفك المصدر لاستخدام أساليبها.
توفر هذه الفئة ثلاثة أجهزة تشفير ووحدات فك تشفير مختلفة لتشفير المعلومات على كل مستوى.
لمزيد من المعلومات والأمثلة: انقر هنا
جافا الفرز المتوازي
توفر Java ميزة إضافية جديدة في فئة Arrays والتي تُستخدم لفرز عناصر المصفوفة بشكل متوازي. تمت إضافة الطريقة المتوازية () إلى فئة java.util.Arrays التي تستخدم تجمع التوازي المشترك JSR 166 Fork/Join لتوفير فرز المصفوفات. إنها طريقة مثقلة.
لمزيد من المعلومات والأمثلة: انقر هنا
تحسينات أمنية لجافا 8
1) يقوم موفر Java Secure مقبس Extension(JSSE) بتمكين بروتوكولات Transport Layer Security (TLS) 1.1 وTLS 1.2 افتراضيًا من جانب العميل.
2) تمت إضافة طريقة محسنة AccessController.doPrivileged والتي تمكن التعليمات البرمجية من تأكيد مجموعة فرعية من امتيازاتها، دون منع الاجتياز الكامل للمكدس للتحقق من الأذونات الأخرى.
3) تمت إضافة خوارزميات معيار التشفير المتقدم (AES) والتشفير القائم على كلمة المرور (PBE)، مثل PBEWithSHA256AndAES_128 وPBEWithSHA512AndAES_256 إلى موفر SunJCE.
4) قام ملحق Java الآمن للمقبس (SunJSSE) بتمكين ملحق إشارة اسم الخادم (SNI) لتطبيقات العميل بشكل افتراضي في JDK 7 ويدعم JDK 8 امتداد SNI لتطبيقات الخادم. يعد امتداد SNI ميزة تعمل على توسيع بروتوكولات SSL/TLS للإشارة إلى اسم الخادم الذي يحاول العميل الاتصال به أثناء المصافحة.
5) تم تحسين SunJSSE لدعم التشفير المصادق مع خوارزميات البيانات المرتبطة (AEAD). تم تحسين موفر Java Cryptography Extension (SunJCE) لدعم تنفيذ تشفير AES/GCM/NoPadding بالإضافة إلى معلمات خوارزمية Galois/Counter Mode (GCM).
6) تتم إضافة إشارة أمر جديدة -importpassword إلى الأداة المساعدة لأداة المفاتيح. يتم استخدامه لقبول كلمة المرور وتخزينها بشكل آمن كمفتاح سري. تتم إضافة فئات مثل java.security.DomainLoadStoreParameter وjava.security.PKCS12Attribute لدعم نوع تخزين المفاتيح DKS.
7) في JDK 8، تم تحسين خوارزميات التشفير باستخدام متغير SHA-224 لعائلة SHA-2 لتطبيقات ملخص الرسائل.
8) دعم محسّن لتشفير NSA Suite B والذي يتضمن:
- تسجيل معرف الكائن (OID) لخوارزميات التشفير NSA Suite B
- دعم إنشاء زوج مفاتيح DSA 2048 بت وخوارزميات التوقيع الإضافية لمفاتيح DSA 2048 بت مثل SHA224withDSA وSHA256withDSA.
- رفع قيود حجم المفتاح من 1024 إلى 2048 لخوارزمية Diffie-Hellman (DH).
9) توفر فئة SecureRandom إنشاء أرقام عشوائية قوية من الناحية التشفيرية تُستخدم للمفاتيح الخاصة أو العامة والأصفار والرسائل الموقعة. تم تقديم طريقة getInstanceStrong() في JDK 8، والتي تُرجع مثيلًا لأقوى SecureRandom. يجب استخدامه عندما تحتاج إلى إنشاء مفتاح RSA خاص وعام. يتضمن SecureRandom التغييرات الأخرى التالية:
- تم تقديم تطبيقين جديدين لمنصات UNIX، والتي توفر سلوك الحظر وعدم الحظر.
10) تم تضمين فئة PKIXRevocationChecker جديدة والتي تتحقق من حالة إلغاء الشهادات باستخدام خوارزمية PKIX. وهو يدعم التحقق من أفضل الجهود، والتحقق من شهادة الكيان النهائي، والخيارات الخاصة بالآلية.
11) تم توسيع معايير تشفير المفتاح العام 11 (PKCS) لتشمل دعم 64 بت لنظام التشغيل Windows.
12) تمت إضافة نوعين جديدين من rcache إلى Kerberos 5. النوع لا شيء يعني عدم وجود rcache على الإطلاق، والنوع dfl يعني rcache المستند إلى ملف نمط DFL. كما أن المفتاح الفرعي الذي طلبه المتقبل أصبح مدعومًا الآن. وقد تم تكوينها باستخدام خصائص النظام sun.security.krb5.rcache وsun.security.krb5.acceptor.subkey.
13) في JDK 8، يتم دعم انتقال بروتوكول Kerberos 5 والتفويض المقيد في نفس المجال.
14) قام Java 8 بتعطيل التشفير الضعيف افتراضيًا. أنواع تشفير Kerberos 5 المرتبطة بـ DES غير مدعومة بشكل افتراضي. يمكن تمكين أنواع التشفير هذه عن طريق إضافةallow_weak_crypto=true في ملف krb5.conf.
15) يمكنك ضبط اسم الخادم على قيمة فارغة للإشارة إلى خادم غير منضم. ويعني أنه يمكن للعميل طلب الخدمة باستخدام أي اسم خادم. بعد إنشاء السياق، يمكن للخادم استرداد الاسم كخاصية متفاوض عليها باستخدام اسم المفتاح SASL.BOUND_SERVER_NAME.
سريديفي
16) أصبح جسر Java Native Interface (JNI) إلى Java Generic Security Service (JGSS) مدعومًا الآن على نظام التشغيل Mac OS X. يمكنك ضبط خاصية النظام sun.security.jgss.native على true لتمكينها.
17) تم تعريف خاصية نظام جديدة، jdk.tls.ephemeralDHKeySize لتخصيص أحجام مفاتيح DH المؤقتة. الحد الأدنى المقبول لحجم مفتاح DH هو 1024 بت، باستثناء مجموعات التشفير القابلة للتصدير أو الوضع القديم (jdk.tls.ephemeralDHKeySize=legacy).
18) يحترم موفر Java Secure Connector Extension (JSSE) تفضيلات مجموعة التشفير الخاصة بالعميل بشكل افتراضي. ومع ذلك، يمكن تغيير السلوك لمراعاة تفضيلات مجموعة التشفير الخاصة بالخادم عن طريق استدعاء SSLPameters.setUseCipherSuitesOrder(true) عبر الخادم.
تحسينات أدوات جافا 8
1) تم تقديم أمر jjs، الذي يستدعي محرك Nashorn إما في وضع الصدفة التفاعلي، أو لتفسير ملفات البرامج النصية.
2) أمر java قادر على تشغيل تطبيقات JavaFX، بشرط أن يتم حزم تطبيق JavaFX بشكل صحيح.
3) تمت إعادة صياغة صفحة دليل أوامر Java (كل من nroff وHTML) بالكامل. يتم الآن تقسيم الخيارات المتقدمة إلى وقت التشغيل، والمترجم، وجمع البيانات المهملة، وإمكانية الخدمة، وفقًا للمنطقة التي تؤثر عليها. تم الآن وصف العديد من الخيارات المفقودة سابقًا. يوجد أيضًا قسم للخيارات التي تم إهمالها أو إزالتها منذ الإصدار السابق.
4) تسمح أداة سطر الأوامر jdeps الجديدة للمطور بتحليل ملفات الفئة لتحديد التبعيات على مستوى الحزمة أو على مستوى الفئة.
5) يمكنك الوصول إلى أوامر التشخيص عن بعد، والتي كان من الممكن الوصول إليها سابقًا محليًا فقط عبر أداة jcmd. يتم توفير الوصول عن بعد باستخدام Java Management Extensions (JMX)، لذلك يتم عرض أوامر التشخيص لنظام MBean الأساسي المسجل على خادم MBean الأساسي. MBean هي واجهة com.sun.management.DiagnosticCommandMBean.
6) تم تضمين خيار جديد -tsapolicyid في أداة jarsigner والذي يمكّنك من طلب طابع زمني موقّع من هيئة ختم الوقت وإرفاقه بملف JAR موقّع.
7) تم تضمين طريقة جديدة java.lang.reflect.Executable.getParameters والتي تسمح لك بالوصول إلى أسماء المعلمات الرسمية لأي طريقة أو مُنشئ. ومع ذلك، لا تقوم ملفات .class بتخزين أسماء المعلمات الرسمية بشكل افتراضي. لتخزين أسماء المعلمات الرسمية في ملف .class معين، وبالتالي تمكين Reflection API من استرداد أسماء المعلمات الرسمية، قم بتجميع الملف المصدر باستخدام خيار -parameters الخاص بمترجم javac.
8) سيتم الآن فرض قواعد النوع للمقارنات الثنائية في قسم مواصفات لغة Java (JLS) 15.21 بشكل صحيح بواسطة javac.
9) في هذا الإصدار، تمت إزالة الأداة apt وواجهة برمجة التطبيقات المرتبطة بها الموجودة في الحزمة com.sun.mirror.
تحسينات جافادوك
في Java SE 8، تمت إضافة واجهات برمجة التطبيقات الجديدة التالية إلى أداة Javadoc.
- تقدم واجهة DocTree API الجديدة ماسحًا ضوئيًا يمكّنك من اجتياز كود المصدر الذي يتم تمثيله بواسطة شجرة بناء جملة مجردة. يؤدي هذا إلى توسيع واجهة برمجة تطبيقات Compiler Tree لتوفير وصول منظم إلى محتوى تعليقات javadoc.
- تحتوي الحزمة javax.tools على فئات وواجهات تمكنك من استدعاء أداة Javadoc مباشرة من تطبيق Java، دون تنفيذ عملية جديدة.
- تمت إعادة هيكلة قسم 'ملخص الطريقة' الخاص بالوثائق التي تم إنشاؤها لفئة أو واجهة. يتم تجميع أوصاف الطريقة في هذا القسم حسب النوع. بشكل افتراضي، يتم سرد كافة الأساليب. يمكنك النقر فوق علامة تبويب لعرض أساليب من نوع معين (ثابت، أو مثيل، أو مجرد، أو ملموس، أو مهمل، إذا كانت موجودة في الفصل الدراسي أو الواجهة).
- تتمتع أداة javadoc الآن بدعم للتحقق من محتوى تعليقات javadoc بحثًا عن المشكلات التي قد تؤدي إلى مشكلات مختلفة، مثل HTML غير صالح أو مشكلات إمكانية الوصول، في الملفات التي تم إنشاؤها بواسطة javadoc. يتم تمكين الميزة افتراضيًا، ويمكن أيضًا التحكم فيها من خلال خيار -Xdoclint الجديد.
تحسينات Pack200
تم تحديث تنسيق ملف فئة Java بسبب JSR 292 الذي يدعم اللغات المكتوبة ديناميكيًا على نظام Java الأساسي.
تم تحديث محرك Pack200 لضمان ضغط ملفات فئة Java SE 8 بشكل فعال. الآن، يمكنه التعرف على إدخالات التجمع الثابتة والرموز الثانوية الجديدة المقدمة بواسطة JSR 292. ونتيجة لذلك، لن تكون الملفات المضغوطة التي تم إنشاؤها باستخدام هذا الإصدار من أداة pack200 متوافقة مع الإصدارات الأقدم من أداة unpack200.
تحسينات الإدخال/الإخراج في Java 8
في Java 8، هناك العديد من التحسينات على java.nio.charset.Charset وتطبيقات مجموعة الأحرف الموسعة. ويشمل ما يلي:
- مُحدد جديد قد يُحسن الأداء أو قابلية التوسع للخادم. يظل /dev/poll SelectorProvider هو الإعداد الافتراضي. لاستخدام آلية منفذ حدث Solaris، قم بالتشغيل باستخدام خاصية النظام java.nio.channels.spi.Selector المعينة على القيمة sun.nio.ch.EventPortSelectorProvider.
- تم تقليل حجم الملف /jre/lib/charsets.jar.
- لقد تم تحسين الأداء لمنشئ java.lang.String(byte[], ∗) وأسلوب java.lang.String.getBytes().
تحسينات شبكة جافا 8
1) تمت إضافة فئة جديدة java.net.URLPermission. إنه يمثل إذنًا للوصول إلى مورد محدد بواسطة عنوان URL محدد.
2) تمت إضافة الحزمة jdk.net التي تحتوي على خيارات مأخذ التوصيل الخاصة بالنظام الأساسي وآلية ضبط هذه الخيارات على كافة أنواع المقابس القياسية. يتم تعريف خيارات مأخذ التوصيل في jdk.net.ExtenedSocketOptions.
3) في فئة HttpURLConnection، إذا تم تثبيت مدير الأمان، وإذا تم استدعاء طريقة تؤدي إلى محاولة فتح اتصال، فيجب أن يمتلك المتصل إما 'connect'SocketPermission لمجموعة المضيف/المنفذ لعنوان URL الوجهة أو URLPermission الذي يسمح بهذا الطلب.
إذا تم تمكين إعادة التوجيه التلقائي، وتمت إعادة توجيه هذا الطلب إلى وجهة أخرى، فيجب أن يكون لدى المتصل أيضًا إذن للاتصال بالمضيف/عنوان URL المعاد توجيهه.
تحسينات التزامن جافا 8
أضافت الحزمة java.util.concurrent واجهتين جديدتين وأربعة فئات جديدة.
واجهات Java.util.concurrent
واجهه المستخدم | وصف |
---|---|
الواجهة الثابتة العامة CompletableFuture.AsynchronousCompletionTask | إنها واجهة علامة تُستخدم لتحديد المهام غير المتزامنة التي تنتجها الطرق غير المتزامنة. قد يكون مفيدًا لمراقبة الأنشطة غير المتزامنة وتصحيح الأخطاء وتتبعها. |
مرحلة إكمال الواجهة العامة | فهو ينشئ مرحلة من العمليات الحسابية التي قد تكون غير متزامنة، والتي تنفذ إجراءً أو تحسب قيمة عند اكتمال مرحلة CompletionStage أخرى. |
فئات Java.util.concurrent
فصل | وصف |
---|---|
الطبقة العامة CompletableFuture تمد الكائن بتنفيذ Future وCompletionStage | إنه مستقبل يمكن إكماله بشكل صريح، ويمكن استخدامه كمرحلة إكمال، يدعم الوظائف والإجراءات التابعة التي يتم تشغيلها عند اكتماله. |
تعمل الفئة الثابتة العامة ConcurrentHashMap.KeySetView على توسيع مجموعة أدوات الكائنات القابلة للتسلسل | إنها طريقة عرض ConcurrentHashMap كمجموعة من المفاتيح، حيث يمكن تمكين الإضافات اختياريًا عن طريق التعيين إلى قيمة مشتركة. |
تعمل فئة التجريد العامة CountedCompleter على توسيع ForkJoinTask | يتم تنفيذ ForkJoinTask مع إجراء إكمال عند تشغيله ولا توجد أي إجراءات معلقة متبقية. |
يمتد CompletionException من الفئة العامة إلى RuntimeException | فهو يطرح استثناءً عند مواجهة خطأ أو استثناء آخر أثناء إكمال نتيجة أو مهمة. |
طرق جديدة في فئة java.util.concurrent.ConcurrentHashMap
تقدم فئة ConcurrentHashMap عدة طرق جديدة في إصدارها الأخير. يتضمن العديد من أساليب forEach (forEach وforEachKey وforEachValue وforEachEntry)، وطرق البحث (البحث، ومفاتيح البحث، وsearchValues، وsearchEntries) وعدد كبير من طرق التخفيض (reduce، وreduceToDouble، وreduceToLong، وما إلى ذلك). تمت إضافة طرق متنوعة أخرى (mappingCount وnewKeySet) أيضًا.
فئات جديدة في java.util.concurrent.atomic
يقدم الإصدار الأخير دعمًا متغيرًا وقابلاً للتطوير والتحديث من خلال مجموعة صغيرة من الفئات الجديدة DoubleAccumulator وDoubleAdder وLongAccumulator وLongAdder. يستخدم داخليًا تقنيات تقليل التنافس التي توفر تحسينات هائلة في الإنتاجية مقارنة بالمتغيرات الذرية.
فصل | وصف |
---|---|
يقوم DoubleAccumulator من الفئة العامة بتوسيع عدد الأدوات القابلة للتسلسل | يتم استخدامه لواحد أو أكثر من المتغيرات التي تحافظ معًا على قيمة مزدوجة قيد التشغيل محدثة باستخدام وظيفة مقدمة. |
يقوم DoubleAdder من الفئة العامة بتوسيع عدد الأدوات القابلة للتسلسل | يتم استخدامه لواحد أو أكثر من المتغيرات التي تحافظ معًا على مجموع مزدوج صفر في البداية. |
تقوم الطبقة العامة LongAccumulator بتوسيع عدد الأدوات القابلة للتسلسل | يتم استخدامه لواحد أو أكثر من المتغيرات التي تحافظ معًا على قيمة طويلة قيد التشغيل محدثة باستخدام وظيفة مقدمة. |
تقوم الطبقة العامة LongAdder بتمديد الرقم بتنفيذ Serializable | يتم استخدامه لواحد أو أكثر من المتغيرات التي تحافظ معًا على مجموع طويل صفر في البداية. |
أساليب جديدة في فئة java.util.concurrent.ForkJoinPool
أضافت هذه الفئة طريقتين جديدتين هما getCommonPoolParallelism() و commonPool()، واللتان تُرجعان مستوى التوازي المستهدف للتجميع المشترك، أو مثيل التجمع المشترك، على التوالي.
طريقة | وصف |
---|---|
ForkJoinPool العام الثابت commonPool () | تقوم بإرجاع مثيل التجمع المشترك. |
int العام الثابت getCommonPoolParallelism() | تقوم بإرجاع مستوى التوازي المستهدف للمجمع المشترك. |
فئة جديدة java.util.concurrent.locks.StampedLock
تمت إضافة فئة جديدة StampedLock والتي تستخدم لإضافة قفل قائم على القدرة بثلاثة أوضاع للتحكم في الوصول للقراءة/الكتابة (الكتابة والقراءة والقراءة المتفائلة). تدعم هذه الفئة أيضًا الأساليب التي توفر التحويلات بشكل مشروط عبر الأوضاع الثلاثة.
فصل | وصف |
---|---|
تقوم الفئة العامة StampedLock بتوسيع الكائن بتنفيذ Serializable | تمثل هذه الفئة قفلًا قائمًا على القدرة بثلاثة أوضاع للتحكم في الوصول للقراءة/الكتابة. |
Java API لمعالجة XML (JAXP) 1.6 التحسينات
في Java 8، تمت إضافة Java API لمعالجة XML (JAXP) 1.6. يتطلب استخدام أداة تحميل موفر الخدمة التي تم تعريفها بواسطة java.util.ServiceLoader لتحميل الخدمات من ملفات تكوين الخدمة.
الأساس المنطقي لذلك هو السماح بوحدة نمطية لمنصة Java SE في المستقبل حيث يمكن نشر موفري الخدمة بوسائل أخرى غير ملفات JAR وربما بدون ملفات تكوين الخدمة.
تحسينات آلة جافا الافتراضية
تم تشديد التحقق من تعليمات الاستدعاء الخاصة بحيث لا يمكن استدعاء سوى طريقة تهيئة المثيل في الفئة الحالية أو فئتها الفائقة المباشرة.
تم تضمين Java Mission Control 5.3 في Java 8
Java Mission Control (JMC) عبارة عن مجموعة متقدمة من الأدوات التي تتيح تحليل البيانات بشكل فعال ومفصل وتوفر مراقبة وإدارة Java متقدمة وغير مزعجة. توفر JMC أقسامًا لمجالات التحليل الشائعة مثل أداء التعليمات البرمجية والذاكرة وزمن الوصول.
يتم الآن تضمين حزم لغة Babel باللغتين اليابانية والصينية المبسطة افتراضيًا في Java Mission Control المضمن في JDK 8.
تحسينات تدويل جافا 8
1) تحسينات يونيكود
يتضمن JDK 8 دعمًا لـ Unicode 6.2.0. أنه يحتوي على الميزات التالية.
- 733 حرفًا جديدًا بما في ذلك علامة الليرة التركية.
- 7 نصوص جديدة:
- الهيروغليفية المروية
- مخطوطة مرَّوية
- سورا سومبينج
- شاكما
- شارادا
- تاكري
- مياو
- 11 كتلة جديدة: بما في ذلك 7 كتل للنصوص البرمجية الجديدة المذكورة أعلاه و4 كتل للنصوص البرمجية الموجودة التالية:
- العربية الموسعة-أ
- ملحق السودانية
- لقاء ملحقات وديع
- الرموز الأبجدية الرياضية العربية
اعتماد بيانات Unicode CLDR وخاصية النظام java.locale.providers
أصدر اتحاد Unicode مشروع مستودع البيانات المحلي المشترك (CLDR) 'لدعم لغات العالم، من خلال أكبر وأوسع مستودع قياسي متاح للبيانات المحلية.' أصبح CLDR هو المعيار الفعلي للبيانات المحلية. تم دمج البيانات المحلية المستندة إلى XML الخاصة بـ CLDR في إصدار JDK 8، إلا أنها معطلة افتراضيًا.
هناك أربعة مصادر متميزة للبيانات المحلية:
- يمثل CLDR البيانات المحلية التي يوفرها مشروع Unicode CLDR.
- يمثل HOST تخصيص المستخدم الحالي لإعدادات نظام التشغيل الأساسي. إنه يعمل فقط مع اللغة الافتراضية للمستخدم، وقد تختلف الإعدادات القابلة للتخصيص وفقًا لنظام التشغيل، ولكن يتم دعم تنسيقات التاريخ والوقت والرقم والعملة بشكل أساسي.
- تمثل SPI الخدمات المحلية الحساسة التي يتم تنفيذها في موفري SPI المثبتين.
- تمثل JRE البيانات المحلية المتوافقة مع إصدارات JRE السابقة.
لتحديد مصدر البيانات المحلية المطلوبة، استخدم خاصية النظام java.locale.providers. سرد مصادر البيانات بالترتيب المفضل. على سبيل المثال: java.locale.providers=HOST,SPI,CLDR,JRE السلوك الافتراضي يعادل الإعداد التالي: java.locale.providers=JRE,SPI
جافا 8 التقويم الجديد وواجهات برمجة التطبيقات المحلية
يتضمن JDK 8 فئتين جديدتين، والعديد من الأساليب الجديدة، وقيمة إرجاع جديدة لطريقة ثابتة موجودة.
تتم إضافة فئتين تجريديتين جديدتين لموفري الخدمة إلى الحزمة java.util.spi.
فصل | وصف |
---|---|
تمتد فئة التجريد العامة CalendarDataProvider إلى LocaleServiceProvider | إنها فئة مجردة لموفري الخدمة الذين يوفرون معلمات التقويم المعتمدة على اللغة. |
تمتد فئة التجريد العامة CalendarNameProvider إلى LocaleServiceProvider | إنها فئة مجردة لمقدمي الخدمات الذين يقدمون تمثيلات سلسلة محلية (أسماء العرض) لقيم حقول التقويم. |
أصبح بإمكان الطريقة الثابتة الآن التعرف على Locale.UNICODE_LOCALE_EXTENSION لنظام الترقيم.
طريقة | وصف |
---|---|
GetInstance النهائي العام الثابت DecimalFormatSymbols (اللغة المحلية) | يتم استخدامه للحصول على مثيل DecimalFormatSymbols للغة المحددة. توفر هذه الطريقة إمكانية الوصول إلى مثيلات DecimalFormatSymbols لللغات المحلية التي يدعمها وقت تشغيل Java نفسه بالإضافة إلى تلك التي تدعمها تطبيقات DecimalFormatSymbolsProvider المثبتة. فإنه يطرح NullPointerException إذا كانت الإعدادات المحلية فارغة. |
تمت إضافة طرق جديدة في واجهة برمجة تطبيقات التقويم:
طريقة | وصف |
---|---|
المنطقية العامة هيSupportedLocale(اللغة المحلية) | يتم إرجاعه صحيحًا إذا كانت اللغة المحددة مدعومة من قبل موفر خدمة اللغة هذا. قد تحتوي الإعدادات المحلية المحددة على امتدادات يجب أخذها في الاعتبار عند تحديد الدعم. يتم تعريفه في فئة java.util.spi.LocaleServiceProvider |
سلسلة عامة getCalendarType () | تقوم بإرجاع نوع التقويم لهذا التقويم. يتم تحديد أنواع التقويم من خلال مواصفات لغة ترميز البيانات المحلية Unicode (LDML). يتم تعريفه في فئة java.util.Calendar. |
تتم إضافة محددات نمط جديدة لأسلوبي Calendar.getDisplayName وCalendar.getDisplayNames لتحديد تنسيق اسم التقويم.
محدد | وصف |
---|---|
النهائي الثابت العام SHORT_FORMAT | إنه محدد نمط لـ getDisplayName و getDisplayNames يشير إلى اسم قصير يستخدم للتنسيق. |
int النهائي الثابت العام LONG_FORMAT | إنه محدد نمط لـ getDisplayName و getDisplayNames يشير إلى الاسم الطويل المستخدم للتنسيق. |
int النهائي الثابت العام SHORT_STANDALONE | وهو محدد نمط لـ getDisplayName وgetDisplayNames يشير إلى اسم قصير يستخدم بشكل مستقل، مثل اختصار الشهر كرؤوس التقويم. |
int النهائي الثابت العام LONG_STANDALONE | وهو محدد نمط لـ getDisplayName وgetDisplayNames يشير إلى اسم طويل يستخدم بشكل مستقل، مثل اسم الشهر كرؤوس التقويم. |
طريقتان محليتان جديدتان للتعامل مع ملحقات اللغة (الاختيارية).
طريقة | وصف |
---|---|
hasExtensions المنطقية العامة () | يتم إرجاعه صحيحًا إذا كان لهذه اللغة أي امتدادات. |
المنطقة العامة stripExtensions() | تقوم بإرجاع نسخة من هذه اللغة بدون ملحقات. إذا لم يكن لهذه اللغة أي امتدادات، فسيتم إرجاع هذه اللغة نفسها. |
تقوم طريقتان Locale.filter جديدتان بإرجاع قائمة بمثيلات Locale التي تطابق المعايير المحددة، كما هو محدد في RFC 4647:
طريقة | وصف |
---|---|
عامل تصفية القائمة الثابتة العامة (قائمة أولويات القائمة، لغات المجموعة) | تقوم بإرجاع قائمة بمثيلات اللغة المحلية المطابقة باستخدام آلية التصفية المحددة في RFC 4647. وهذا يعادل عامل التصفية (List, Collection, FilteringMode) عندما يكون الوضع Locale.FilteringMode.AUTOSELECT_FILTERING. |
عامل تصفية القائمة الثابتة العامة (قائمة أولويات القائمة، لغات المجموعة، وضع Locale.FilteringMode) | تقوم بإرجاع قائمة بمثيلات اللغة المحلية المطابقة باستخدام آلية التصفية المحددة في RFC 4647. |
تقوم طريقتان Locale.filterTags الجديدتان بإرجاع قائمة بعلامات اللغة التي تطابق المعايير المحددة، كما هو محدد في RFC 4647.
طريقة | وصف |
---|---|
علامات تصفية القائمة الثابتة العامة (قائمة الأولويات، علامات المجموعة) | تقوم بإرجاع قائمة بعلامات اللغات المطابقة باستخدام آلية التصفية الأساسية المحددة في RFC 4647. وهذا يعادل filterTags(List, Collection, FilteringMode) عندما يكون الوضع Locale.FilteringMode.AUTOSELECT_FILTERING. |
علامات تصفية القائمة الثابتة العامة (قائمة الأولويات، علامات المجموعة، وضع Locale.FilteringMode) | تقوم بإرجاع قائمة بعلامات اللغات المطابقة باستخدام آلية التصفية الأساسية المحددة في RFC 4647. |
تقوم طريقتان جديدتان للبحث بإرجاع علامة اللغة أو اللغة الأكثر تطابقًا باستخدام آلية البحث المحددة في RFC 4647.
طريقة | وصف |
---|---|
البحث عن لغة ثابتة عامة (قائمة الأولويات، لغات المجموعة) | تقوم بإرجاع مثيل لغة لعلامة اللغة الأفضل مطابقة باستخدام آلية البحث المحددة في RFC 4647. |
علامة البحث عن السلسلة الثابتة العامة (قائمة الأولويات، علامات المجموعة) | تقوم بإرجاع علامة اللغة الأفضل مطابقة باستخدام آلية البحث المحددة في RFC 4647. |
تحسينات أخرى لإصدار Java 8
التحسينات في JDK 8u5
1) تم تقليل معدل تكرار ظهور المطالبات الأمنية لأحد التطبيقات.
التحسينات في JDK 8u11
1) يتوفر خيار لمنع العروض المقدمة من الجهات الراعية عند تثبيت JRE أو تحديثه في علامة التبويب خيارات متقدمة في لوحة تحكم Java.
2) يمكن تضمين سمة نقطة الإدخال في بيان ملف JAR لتحديد فئة واحدة أو أكثر كنقطة دخول صالحة لـ RIA (تطبيق الإنترنت الغني) الخاص بك.
التحسينات في JDK 8u20
1) تمت إعادة تسمية أداة javafxpackager إلى javapackager. تم تحسين هذه الأداة باستخدام وسائط جديدة لحزم التطبيقات المستقلة.
شار وكثافة العمليات جافا
ترتبط التحسينات التالية بأداة جافا:
- تمت إضافة خيار مترجم JIT التجريبي المتعلق بذاكرة المعاملات المقيدة (RTM).
- تمت إضافة العديد من الخيارات المتعلقة بإلغاء البيانات المكررة للسلسلة.
- تمت إضافة العديد من الخيارات المتعلقة بمعيار التشفير المتقدم (AES).
- لقد تم إهمال مجموعات من خيارات جمع البيانات المهملة.
2) تمت إضافة دليل ضبط مجموعة البيانات المهملة إلى Java HotSpot Virtual Machine. وهو يصف أدوات تجميع البيانات المهملة المضمنة في Java HotSpot VM ويساعدك على تحديد أداة تجميع البيانات المهملة التي يمكنها تحسين أداء تطبيقك على أفضل وجه، خاصة إذا كانت تتعامل مع كميات كبيرة من البيانات (عدة غيغابايت)، وتحتوي على العديد من سلاسل العمليات، ولها معدلات معاملات عالية .
التحسينات في JDK 8u31
1) في هذا الإصدار، تمت إزالة بروتوكول SSLv3 من الخيارات المتقدمة للوحة تحكم Java.
التحسينات في JDK 8u40
أداة جافا
1) تمت إضافة -XX:+CheckEndorsedAndExtDirs لأنه تم إهمال آلية تجاوز المعايير المعتمدة (JDK-8065675) وآلية التمديد (JDK-8065702). يساعد هذا الخيار في تحديد أي استخدامات حالية لهذه الآليات وهو مدعوم في JDK 7u80 وJDK 8u40.
2) يوفر Java Flight Recorder (JFR) مجموعة متنوعة من الطرق لفتح الميزات التجارية وتمكين JFR أثناء وقت تشغيل التطبيق.
يتضمن خيارات سطر أوامر Java مثل أوامر التشخيص jcmd وعناصر تحكم واجهة المستخدم الرسومية (GUI) ضمن Java Mission Control. تمكنك هذه المرونة من توفير الخيارات المناسبة عند بدء التشغيل، أو التفاعل مع JFR لاحقًا.
3) يحتوي الخيار -XX:StartFlightRecording=parameter=value على معلمة جديدة، dumponexit=true، والتي تحدد ما إذا كان يجب إنشاء ملف تفريغ لبيانات JFR عند انتهاء JVM بطريقة يمكن التحكم فيها.
4) لم تعد الخيارات المتعلقة بذاكرة المعاملات المقيدة (RTM) تجريبية. تتضمن هذه الخيارات -XX:RTMAbortRatio=abort_ratio، و-XX:RTMRetryCount=number_of_retries، و-XX:+UseRTMDeopt، و-XX:+UseRTMLocking.
5) في Java 8، تم تقديم مشاركة بيانات فئة التطبيق (AppCDS). يقوم AppCDS بتوسيع CDS (مشاركة بيانات الفئة) لتمكين الفئات من أدلة الامتدادات القياسية ومسار فئة التطبيق ليتم وضعها في الأرشيف المشترك. هذه ميزة تجارية ولم تعد تعتبر تجريبية.
6) تمت إضافة خيارات جديدة -XX:+ResourceManagement و-XX:ResourceManagementSampleInterval=value.
7) تمت إضافة معلومات إضافية حول الصفحات الكبيرة. الصفحات الكبيرة، والمعروفة أيضًا بالصفحات الضخمة، هي صفحات ذاكرة أكبر بكثير من حجم صفحة الذاكرة القياسية. تعمل الصفحات الكبيرة على تحسين المخازن المؤقتة لترجمة المعالج وLookaside. تم توثيق خيارات Linux -XX:+UseHugeTLBFS، و-XX:+UseSHM، و-XX:+UseTransparentHugePages.
8) تم توثيق الخيار -XX:ObjectAlignmentInBytes=alignment.
أداة JJS
1) تمت إضافة الخيار --optimistic-types=[true|false]. فهو يمكّن أو يعطل افتراضات النوع المتفائل من خلال إلغاء تحسين عملية إعادة الترجمة.
2) تمت إضافة الخيار --language=[es5] إلى أداة jjs. وهو يحدد إصدار لغة ECMAScript.
أداة جافا باكاجر
1) تتوفر وسائط جديدة لحزم OS X. تحدد الوسيطة mac.CFBundleVersion رقم الإصدار الداخلي المطلوب استخدامه.
2) تشير الوسيطة mac.dmg.simple إلى ما إذا تم تخطي خطوات تخصيص DMG التي تعتمد على تنفيذ تعليمات AppleScript البرمجية.
أداة جي سي إم دي
تُستخدم أداة Jcmd للتفاعل ديناميكيًا مع Java Flight Recorder (JFR). يمكنك استخدامه لفتح الميزات التجارية، وتمكين/بدء/إيقاف تسجيلات الطيران، والحصول على رسائل الحالة المتنوعة من النظام.
أداة جستات
تم تحديث أداة jstat بمعلومات حول مساحة الفئة المضغوطة والتي تعد جزءًا خاصًا من مساحة التعريف.
آلة افتراضية
تساعد ميزة HotSpot VM لتتبع الذاكرة الأصلية القابلة للتطوير على تشخيص تسرب ذاكرة الجهاز الافتراضي وتوضيح المستخدمين عندما لا يكون هناك تسرب للذاكرة في الجهاز الظاهري. يمكن تشغيل Native Memory Tracker دون إيقاف التشغيل ذاتيًا على الأنظمة الكبيرة ودون التسبب في تأثير كبير على الأداء يتجاوز ما يعتبر مقبولاً للبرامج الصغيرة.