JavaRush /مدونة جافا /Random-AR /تم إصدار Java 11: ميزات وقدرات جديدة

تم إصدار Java 11: ميزات وقدرات جديدة

نشرت في المجموعة
في السابق، كانت الإصدارات الجديدة من Java تظهر نادرًا وبتأخير. والآن تحافظ Oracle بنجاح على إيقاعها الذاتي المتمثل في "جافا الجديدة كل ستة أشهر". لذا، قبل بضعة أيام، وفي الموعد المحدد تمامًا، تلقينا أخيرًا Java SE 11 وتنفيذ JDK (Java Development Kit). إصدار Java 11: ميزات وقدرات جديدة - 1وكما هو الحال دائمًا، سيكون الإصدار الجديد متوافقًا مع الإصدارات القديمة، ولن ينتهي دعم Java 11 قبل ديسمبر 2026.

ميزات جديدة في Java SE 11 (مرئية للمطورين)

تذكر أنه في Java، يتم إجراء التغييرات من خلال تنفيذ JEP "JDK Enhancement Proposal". JEP هو اقتراح لتحسين OpenJDK وقد تتم الموافقة عليه أو تأخيره أو رفضه. وهذا هو، في جوهره، مجموعة JEPs هي استراتيجية تطوير لـ OpenJDK. بين قوسين معقوفين قبل "الميزة" الجديدة، سنشير إلى عدد JEP المقابل. [323] بناء جملة المتغير المحلي لمعلمات Lambda - بناء جملة var لمعلمات lambda قدمت Java 10 الكلمة الأساسية var، مما جعل من الممكن عدم تحديد نوع المتغير المحلي بشكل صريح. أدى هذا إلى تبسيط الكود. يوسع JEP 323 استخدام بناء الجملة هذا مع تعبيرات لامدا. مثال بسيط:
list.stream ()
                 .map ((var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
كما كتب سايمون ريتر ، وهو مبشر جافا معروف، سيلاحظ مبرمج جافا ذو الخبرة أن استخدام var في هذه الحالة قد يكون غير ضروري، حيث يمكن استبدال الكود أعلاه بما يلي:
list.stream ()
                  .map (s -> s.toLowerCase ())
                  .collect (Collectors.toList ());
لماذا، إذن، دعم فار؟ هناك حالة خاصة واحدة فقط - عندما تريد إضافة تعليق توضيحي إلى معلمة لامدا. لا يمكن القيام بذلك دون استخدام نوع ما، ولتجنب استخدام نوع صريح، يمكننا تبسيط كل شيء باستخدام var مثل هذا:
list.stream ()
                 .map ((@ Notnull var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
[330] إطلاق برامج التعليمات البرمجية المصدرية ذات الملف الواحد تعزيز مشغل Java لتشغيل برنامج كملف واحد باستخدام كود مصدر Java. غالبًا ما يتم انتقاد Java بسبب تركيبها المطول و"احتفال" متعدد الخطوات لإطلاق حتى تطبيق تافه. في بعض الأحيان هذا يخيف المبتدئين. لكتابة تطبيق يطبع ببساطة " Hello World! " "، فأنت بحاجة إلى كتابة فصل دراسي بطريقة voidرئيسية ثابتة عامة واستخدام الملف System.out.println. بعد القيام بذلك، يجب عليك تجميع التعليمات البرمجية باستخدام javac . أخيرًا، بعد ذلك، يمكنك تشغيل التطبيق، الذي سيعرض التحية المشؤومة (بالطبع، بيئة التطوير المتكاملة، IDEA وتلك المضمنة في JavaRush ، تؤدي "سحر إطلاق التطبيق" من تلقاء نفسها - ملاحظة المحرر ). لنكن صادقين: في معظم لغات البرمجة، يبدو النص الفعلي لتشغيل البرامج أبسط بكثير. يلغي JEP 330 الحاجة إلى ترجمة تطبيق من ملف واحد، لذا الآن إذا كنت تستخدم سطر الأوامر، فما عليك سوى الكتابة
java HelloWorld.java
سيكتشف مشغل Java أن الملف يحتوي على كود مصدر Java ويقوم بتجميع الكود في ملف فئة قبل تنفيذه. يمكنك وضع المعلمات بعد أو قبل اسم ملف التعليمات البرمجية المصدر. يتم تمرير تلك التي يتم وضعها بعد الاسم كمعلمات عند تنفيذ التطبيق. يتم تمرير تلك التي تم وضعها قبل الاسم كمعلمات إلى مشغل Java بعد تجميع التعليمات البرمجية. سيتم أيضًا تمرير الخيارات الخاصة بالمترجم (مثل classpath) إلى javac للتجميع. مثال. خط:
java -classpath / home / foo / java Hello.java Bonjour
سيكون معادلاً لهذه الأسطر:
javac -classpath / home / foo / java Hello.java
java -classpath / home / foo / java Hello Bonjour
[321] عميل HTTP (قياسي) - تم توحيد دعم واجهة برمجة تطبيقات عميل HTTP. قدم JDK 9 واجهة برمجة تطبيقات جديدة لدعم بروتوكول عميل HTTP (JEP 110) . نظرًا لأن JDK 9 قدم أيضًا نظام Java Platform Module System (JPMS) ، فقد تم تضمين واجهة برمجة التطبيقات هذه كوحدة حاضنة (وهي وحدات لتزويد المطورين بواجهات برمجة تطبيقات جديدة لم تصبح قياسية بعد في Java SE، بينما يتم تشغيل واجهات برمجة التطبيقات "المباشرة" جاهز للإزالة - يمكن للمطورين تجربة واجهات برمجة التطبيقات الجديدة ومحاولة تقديم التعليقات). بمجرد إجراء التغييرات اللازمة (تم تحديث واجهة برمجة التطبيقات هذه في JDK 10)، يمكن أن تصبح واجهة برمجة التطبيقات جزءًا من المعيار. لذلك، تم الآن تضمين واجهة برمجة تطبيقات عميل HTTP رسميًا في Java SE 11 . يقدم هذا وحدة وحزمة جديدة لـ JDK، java.net.http . الأنواع الرئيسية الجديدة هي: HttpClient HttpRequest HttpResponse WebSocket يمكن استخدام واجهة برمجة التطبيقات هذه بشكل متزامن أو غير متزامن. في الوضع غير المتزامن، CompletionFuturesويتم استخدامها CompletionStages. [320] إزالة وحدات Java EE وCORBA مع تقديم نظام Java Platform Module (JPMS) في الإصدار التاسع من Java، أصبح من الممكن تقسيم ملف rt.jar المتجانس إلى عدة وحدات. بالإضافة إلى ذلك، يتيح لك JPMS إنشاء بيئة تشغيل Java تتضمن فقط الوحدات التي يحتاجها تطبيقك، مما يقلل حجمه بشكل كبير. مع حدود الوحدات المحددة بشفافية، يكون من الأسهل بكثير إزالة الأجزاء القديمة من Java API - وهذا ما يفعله JEP 320. تتضمن وحدة metamodule java.se.ee ست وحدات لن تكون جزءًا من معيار Java SE 11 ولن يتم تضمينها في جدك:
  • com.corba
  • عملية
  • التنشيط
  • xml.bind
  • xml.ws
  • xml.ws.annotation
تم إهمال هذه الوحدات في JDK 9 ولم يتم تضمينها افتراضيًا في التجميع أو التنفيذ. هذا يعني أنك إذا حاولت ترجمة أو تشغيل تطبيق يستخدم واجهات برمجة التطبيقات الخاصة بهذه الوحدات على JDK 9 أو JDK 10، فقد فشلت. إذا كنت تستخدم واجهات برمجة التطبيقات (APIs) الخاصة بهذه الوحدات في التعليمات البرمجية الخاصة بك، فستحتاج إلى توفيرها كوحدة نمطية أو مكتبة منفصلة.

واجهات برمجة التطبيقات الجديدة

ظهر عدد كبير من واجهات برمجة التطبيقات الجديدة في JDK 11 بفضل تضمين وحدات عميل HTTP و Flight Recorder في معيار اللغة . للحصول على قائمة كاملة بواجهات برمجة التطبيقات، راجع المقارنة الشاملة التالية للإصدارات المختلفة من JDK ، والتي تم تجميعها بواسطة Gunnar Morling. وسندرج في هذه المذكرة بعض الأساليب الجديدة التي لم يتم تضمينها في الوحدات النمطية java.net.http و jdk.jfr و java.security . java.lang.String يمكن القول إن أحد أهم التغييرات التي تم إدخالها على السلسلة في JDK 11 API، هو وجود العديد من الطرق الجديدة المفيدة.
  • boolean isBlank (): يُرجع صحيحًا إذا كانت السلسلة فارغة أو تحتوي على مسافات فقط، ويُرجع خطأً في حالة عدم ذلك.

  • Stream lines(): إرجاع دفق من الخطوط المستخرجة من هذه السلسلة، مفصولة بإنهاء الأسطر.

  • String repeat (int): تقوم بإرجاع سلسلة قيمتها هي سلسلة تلك السلسلة المتكررة مرات int .

  • String strip (): إرجاع سلسلة مع إزالة جميع المسافات قبل أو بعد أول حرف غير مسافات.

  • String stripLeading (): إرجاع سلسلة مع إزالة جميع المسافات حتى أول حرف غير مسافات.

  • String stripTrainling (): إرجاع سلسلة بكل المسافات التي تحدث بعد إزالة آخر حرف غير مسافات.
strip()فعلت الطريقة بالفعل شيئًا مشابهًا trim ()، ولكن بالمسافات تعني هذه الطرق أشياء مختلفة. في هذه الحالة، trim()يتم قطع المسافات فقط، وفي strip()- أيضًا الأحرف الخاصة، مثل علامات التبويب. java.lang.StringBuffer java.lang.StringBuilder تحتوي كل من هذه الفئات على طريقة جديدة compareTo ()تقبل StringBuffer/ StringBuilderوتعيد int. تشبه طريقة المقارنة المعجمية الطريقة الجديدة compareTo() CharSequence. java.io.ByteArrayOutputStream
  • void writeBytes (byte []): يكتب كافة بايتات المعلمة إلى دفق إخراج java.io.FileReader
يوجد هنا منشئان جديدان يسمحان لك بتحديد Charset. java.io.FileWriter أربعة مُنشئات جديدة تسمح لك بتحديد Charset. java.io.InputStream
  • io.InputStream nullInputStream (): يعود InputStream، والذي لا يقرأ أي بايت. كيفية استخدام هذه الطريقة؟ يمكنك التفكير في الأمر كشيء مثل /dev/null للتخلص من المخرجات التي لا تحتاج إليها، أو لحقن المدخلات التي تُرجع دائمًا صفر بايت.
java.io.OutputStream
  • io.OutputStream nullOutputStream ()
java.io.Reader
  • io.Reader nullReader ()
java.io.Writer
  • io.Writer nullWriter ()
java.lang.Character
  • String toString (int): يعد هذا تحميلًا زائدًا لطريقة موجودة، ولكنه يستخدم int بدلاً من char.
java.lang.CharSequence
  • int compare (CharSequence, CharSequence): يقارن معجميا بين حالتين CharSequence. إرجاع قيمة سالبة أو صفر أو قيمة موجبة إذا كان التسلسل الأول أقل من التسلسل الثاني أو يساويه أو أكبر منه من الناحية المعجمية، على التوالي.
java.lang.ref.Reference
    lang.Object clone (): يعترف مبشر جافا سيمون ريتر بأن هذه الطريقة تربكه. لا يطبق الفصل Referenceواجهة Cloneableوستقوم هذه الطريقة دائمًا بطرح استثناء CloneNotSupportedException. ومع ذلك، يشير الخبير إلى أن هذه الطريقة ستكون مفيدة لشيء ما في المستقبل.
java.lang.Runtime java.lang.System لا توجد طرق جديدة هنا. دعنا نذكر فقط أنه runFinalizersOnExit ()تمت إزالة الطريقة من هاتين الفئتين، مما قد يسبب مشكلات في التوافق. java.lang.Thread لا توجد طرق إضافية، سنذكر فقط أنها destroy ()تمت stop (Throwable)إزالتها. ومع ذلك stop ()، الذي لا يأخذ أي وسيطات، لا يزال متاحًا. يرجى أخذ ذلك في الاعتبار لأنه قد تكون هناك مشكلات في التوافق. java.nio.ByteBuffer java.nio.CharBuffer java.nio.DoubleBuffer java.nio.FloatBuffer java.nio.LongBuffer java.nio.ShortBuffer في كل هذه الفئات، أضاف مطورو اللغة طريقة mismatch ()تقوم بالعثور على الفهرس النسبي وإرجاعه عدم التطابق الأول بين هذا المخزن المؤقت والمخزن المؤقت المحدد. java.nio.channels.SelectionKey
  • int interestOpsAnd (int)

  • int interestOpsOr (int)
java.nio.channels.Selector
  • int select (java.util.function.Consumer, long): تحديد وتنفيذ إجراء على المفاتيح التي تكون قنواتها المقابلة جاهزة لعمليات الإدخال/الإخراج. المعلمة الطويلة هي مهلة.

  • int select (java.util.function.Consumer): يعمل بنفس الطريقة المذكورة أعلاه، ولكن دون مهلة.

  • int selectNow (java.util.function.Consumer): يعمل بنفس الطريقة المذكورة أعلاه، ولكنه غير محظور.

java.nio.file.Files
  • String readString (Path): يقرأ كل المحتوى من ملف إلى سلسلة، ويفك تشفير البايتات إلى أحرف باستخدام ترميز UTF-8 .

  • String readString (Path, Charset): يعمل بنفس الطريقة المذكورة أعلاه، ولكنه يقوم بفك تشفير البايتات إلى أحرف باستخدام Charset.

  • Path writeString (Path, CharSequence, java.nio.file. OpenOption []): إذا كتبت سلسلة من الأحرف CharSequenceإلى ملف، فسيتم ترميز هذه الأحرف إلى بايت (باستخدام UTF-8 ).

  • Path writeString (Path, CharSequence, java.nio.file. Charset, OpenOption []): يعمل بنفس الطريقة المذكورة أعلاه، ويتم تشفير الأحرف فقط إلى بايت باستخدام Charset.
java.nio.file.Path
  • Path(String, String[]): إرجاع المسار، وتحويل سلسلة مسار أو تسلسل من السلاسل التي عند دمجها تشكل سلسلة مسار.

  • المسار (net.URI): إرجاع المسار عن طريق تحويل URI.
java.util.Collection
  • Object [] toArray (java.util.function.IntFunction): إرجاع مصفوفة تحتوي على جميع العناصر الموجودة في هذه المجموعة، باستخدام وظيفة المولد المتوفرة لتوزيع المصفوفة التي تم إرجاعها.
java.util.concurrent.PriorityBlockingQueue java.util.PriorityQueue
  • void forEach (java.util.function.Consumer): ينفذ الإجراء المحدد على كل عنصر قابل للتكرار حتى تتم معالجة جميع العناصر أو يفرض الإجراء استثناءً.

  • boolean removeAll (java.util.Collection): إزالة كافة عناصر هذه المجموعة الموجودة أيضًا في المجموعة المحددة (عملية اختيارية).

  • boolean removeIf (java.util.function.Predicate): يزيل كافة عناصر هذه المجموعة التي تلبي المسند المحدد.

  • boolean retainAll (java.util.Collection): يحافظ فقط على العناصر الموجودة في هذه المجموعة الموجودة في المجموعة المحددة (عملية اختيارية).
java.util.concurrent.TimeUnit
  • long convert (java.time.Duration): تحويل المدة الزمنية المحددة لهذه الوحدة.
java.util.function.Predicate
  • Predicate not(Predicate): إرجاع المسند الذي هو نفي المسند المحدد.
على سبيل المثال الكود التالي:
lines.stream ()

.filter (s ->! s.isBlank ())
يمكن تحويلها إلى هذا:
lines.stream ()

.filter (Predicate.not (String :: ISBLANK))
وإذا استخدمنا الاستيراد الثابت، فهذا ما نحصل عليه:
lines.stream ()
.filter (not(String :: ISBLANK))
java.util.Optional java.util.OptionalInt java.util.OptionalDouble java.util.OptionalLong
  • boolean isEmpty (): يُرجع صحيحًا إذا لم تكن هناك قيمة ، ويُرجع خطأً إذا لم يكن هناك قيمة .
java.util.regex.Pattern
  • Predicate asMatchPredicate (): يعتقد خبير Java Simon Ritter أنه قد تكون هناك جوهرة حقيقية لـ JDK 11 API مخفية هنا. تقوم هذه الطريقة بإنشاء مسند يتحقق مما إذا كان هذا النمط يتطابق مع سلسلة إدخال معينة.
java.util.zip.Deflater
  • int deflate (ByteBuffer): يضغط بيانات الإدخال ويملأ المخزن المؤقت المحدد بالبيانات المضغوطة.

  • int deflate (ByteBuffer, int): يضغط بيانات الإدخال ويملأ المخزن المؤقت المحدد بالبيانات المضغوطة. إرجاع الكمية الفعلية للبيانات المضغوطة.

  • void setDictionary (ByteBuffer): يضبط القاموس المحدد ليتم ضغطه إلى بايت في المخزن المؤقت المحدد. يعد هذا تحميلًا زائدًا لطريقة موجودة يمكنها الآن قبول مصفوفة ByteBufferبايت بدلاً من مصفوفة بايت.

  • void setInput (ByteBuffer): يضبط بيانات الإدخال المراد ضغطها. وهو أيضًا حمل زائد لطريقة موجودة.
java.util.zip.Inflater
  • int inflate (ByteBuffer): فك حزم البايتات في المخزن المؤقت المحدد. إرجاع العدد الفعلي للبايتات غير المضغوطة.

  • void setDictionary (ByteBuffer): يضبط القاموس المحدد على البايتات الموجودة في المخزن المؤقت المحدد. هو شكل مثقل من الطريقة الموجودة.

  • void setInput (ByteBuffer): لتعيين بيانات الإدخال لإلغاء الضغط. نموذج مثقل لطريقة موجودة.
javax.print.attribute.standard.DialogOwner هذه فئة جديدة في JDK 11 وهي فئة سمة تستخدم لدعم طلبات صفحة الطباعة أو التخصيص ليتم عرضها أعلى جميع النوافذ أو نافذة معينة. javax.swing.DefaultComboBoxModel javax.swing.DefaultListModel
  • void addAll (Collection): إضافة كافة العناصر الموجودة في المجموعة.

  • void addAll (int, Collection): يضيف جميع العناصر الموجودة في المجموعة، بدءًا من الفهرس المحدد.
javax.swing.ListSelectionModel
  • int [] getSelectedIndices (): إرجاع مصفوفة من جميع الفهارس المحددة في النموذج المحدد بترتيب تصاعدي.

  • int getSelectedItemsCount (): إرجاع عدد العناصر المحددة.
jdk.jshell.EvalException
  • shell.JShellException getCause (): يُرجع السبب القابل للطرح في عميل التنفيذ المقدم بواسطة EvalException، أو يُرجع قيمة فارغة إذا كان السبب غير موجود أو غير معروف.

ميزات غير المطورين لـ Java 11

[181] التحكم في الوصول المعتمد على Nest تدعم Java واللغات الأخرى الفئات المتداخلة من خلال الفئات الداخلية. لكي يعمل هذا، يجب على المترجم تنفيذ بعض الحيل. على سبيل المثال:
public class Outer {
    private int outerInt;

     class Inner {
       public void printOuterInt() {
         System.out.println("Outer int = " + outerInt);
       }
     }
   }
يقوم المترجم بتعديل هذا لإنتاج شيء مثل ما يلي قبل الترجمة:
public class Outer {
      private int outerInt;

      public int access$000() {
        return outerInt;
      }

    }


    class Inner$Outer {

      Outer outer;

      public void printOuterInt() {
        System.out.println("Outer int = " + outer.access$000());
      }
    }
على الرغم من أن الفئة الداخلية منطقيًا هي جزء من نفس كود الفئة الخارجية، إلا أنه يتم تجميعها كفئة منفصلة. لذلك، تتطلب هذه العملية طريقة ربط اصطناعية يجب إنشاؤها بواسطة المترجم لتوفير الوصول إلى الحقل الخاص للفئة الخارجية. يقدم هذا JEP مفهوم الأعشاش، حيث يكون عضوان من نفس العش (الخارجي والداخلي في مثالنا) رفيقين في التعشيش. تم تحديد سمتين جديدتين لتنسيق ملف الفئة: NestHost و NestMembers . هذه التغييرات مفيدة للغات الأخرى التي تدعم الفئات المتداخلة والرمز الثانوي. تقدم هذه الوظيفة ثلاث طرق جديدة لـ java.lang.Class : Class getNestHost () Class [] getNestMembers () boolean isNestmateOf (Class) [309] ثوابت ملف الفئة الديناميكية يصف هذا JEP امتدادًا لتنسيق ملف الفئة لدعم الجديد شكل التجمع المستمر CONSTANT_Dynamic. تبدو فكرة الثابت الديناميكي وكأنها تناقض لفظي، ولكن في الأساس يمكنك اعتبارها قيمة نهائية في Java 11. لا يتم تعيين قيمة ثابت التجميع في وقت الترجمة (على عكس الثوابت الأخرى)، ولكنها تستخدم التمهيد طريقة تحديد القيمة في المهلة الزمنية. ولذلك فإن القيمة ديناميكية، ولكن بما أن قيمتها يتم تعيينها مرة واحدة فقط، فهي ثابتة أيضًا. تستهدف هذه الميزة في المقام الأول الأشخاص الذين يطورون لغات ومترجمين جددًا يقومون بإنشاء أكواد بايت وملفات فئة كمخرجات للتشغيل على JVM. [315] تحسين جوهر Aarch64 تم اقتراح JEP هذا من قبل مجتمع Red Hat. يمكن لـ JVM الآن استخدام تعليمات أكثر تخصصًا متوفرة في مجموعة تعليمات Arm 64. على وجه الخصوص ، يؤدي هذا إلى تحسين أداء الطرق sin ()وفئة cos ()java.lang.Math . [318] Epsilon: أداة تجميع القمامة غير قابلة للتشغيل كما هو الحال مع JEP 315 ، يمكنك شكر Red Hat على تقديم أداة تجميع القمامة Epsilon. إبسيلون غير معتاد من حيث أنه لا يقوم بجمع القمامة! عند إنشاء كائنات جديدة، فإنه يخصص الذاكرة إذا لزم الأمر، لكنه لا يستعيد المساحة التي تشغلها الكائنات غير المسجلة. " ما هي النقطة؟ "، - أنت تسأل. وتبين أن "مجموعة القمامة" هذه لها استخدامان: log ()
  1. بادئ ذي بدء، تم تصميم أداة تجميع البيانات المهملة هذه لضمان تقييم خوارزميات GC الجديدة من حيث تأثير أدائها. تتمثل الفكرة في تشغيل تطبيق نموذجي باستخدام Epsilon وإنشاء مجموعة من المقاييس. يتم تمكين خوارزمية جمع البيانات المهملة الجديدة، ويتم تشغيل نفس الاختبارات، ثم تتم مقارنة النتائج.

  2. بالنسبة للمهام القصيرة جدًا (فكر في الوظائف بدون خادم في السحابة) حيث يمكنك ضمان عدم تجاوز الذاكرة المخصصة للكومة. يمكن أن يؤدي ذلك إلى تحسين الأداء عن طريق التخلص من النفقات العامة (بما في ذلك جمع الإحصائيات اللازمة لتحديد ما إذا كان سيتم تشغيل المجمع) في كود التطبيق. إذا تم استنفاد مساحة الكومة، فقد تتم تكوين JVM بشكل خاطئ بإحدى الطرق الثلاث:
    • عادي يسمى OutOfMemoryError.
    • إجراء إعادة تعيين الكومة
    • لقد فشل محرك الأقراص الثابتة JVM وربما يقوم بمهمة أخرى (مثل بدء تشغيل مصحح الأخطاء).
[328]: مسجل الطيران Flight Recorder هو إطار عمل للحصول على بيانات منخفضة المستوى لـ JVM. قبل إصدار JDK 11، كانت هذه ميزة تجارية في برنامج Oracle JDK الثنائي. تعمل Oracle الآن على التخلص من الاختلافات الوظيفية بين Oracle JDK وبنية واحدة من OpenJDK. إليك ما يفعله مسجل الطيران :
  • يوفر واجهة برمجة التطبيقات (API) لإنتاج البيانات واستهلاكها كأحداث
  • يوفر آلية عازلة وتنسيق البيانات الثنائية
  • يسمح بتخصيص وتصفية الأحداث
  • توفير الأحداث لمكتبات OS وJVM HotSpot وJDK
توجد وحدتان جديدتان هنا: jdk.jfr و jdk.management.jfr . [329] خوارزميات التشفير ChaCha20 وPoly1305 يدور برنامج JEP هذا حول تحديث الأصفار المستخدمة بواسطة JDK. تطبق هذه الحالة خوارزميات التشفير ChaCha20 و ChaCha20-Poly1305 كما هو محدد في RFC 7539. ChaCha20 عبارة عن تشفير دفق جديد نسبيًا يمكنه استبدال تشفير RC4 الأقدم وغير الآمن . [333] ZGC: مجمع قمامة منخفض الكمون قابل للتطوير مجمع قمامة تجريبي قابل للتطوير ذو زمن وصول منخفض. مصمم للاستخدام مع التطبيقات التي تتطلب كومة كبيرة (عدة غيغابايت) وزمن وصول منخفض. يستخدم كومة جيل واحدة ويقوم بمعظم (وليس كل) أعمال جمع البيانات المهملة في نفس وقت عمل التطبيق. [332] أمان طبقة النقل (TLS) 1.3 TLS 1.3 (RFC 8446) هو تصحيح رئيسي لبروتوكول أمان طبقة النقل TLS الذي يوفر تحسينات كبيرة في الأمان والأداء مقارنة بالإصدارات السابقة. يدعم JDK الآن إصدار البروتوكول هذا. وتستند المادة إلى مقال بقلم سيمون ريتر والوثائق الرسمية .
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION