JavaRush /Java блогы /Random-KK /Java 11 шығарылды: жаңа мүмкіндіктер мен мүмкіндіктер

Java 11 шығарылды: жаңа мүмкіндіктер мен мүмкіндіктер

Топта жарияланған
Бұрын Java-ның жаңа нұсқалары сирек және кідіріспен пайда болды. Енді Oracle өзі белгілеген ырғақты сәтті сақтайды: «әр жарты жыл сайын жаңа Java». Осылайша, бірнеше күн бұрын, кестеге сәйкес, біз Java SE 11 және JDK (Java Development Kit) іске асырылуын алдық. Java 11 шығарылды: жаңа мүмкіндіктер мен мүмкіндіктер - 1Әдеттегідей, жаңа нұсқа ескі нұсқалармен үйлесімді болады және Java 11 қолдауы 2026 жылдың желтоқсанынан ерте аяқталмайды.

Java SE 11 жаңа мүмкіндіктері (әзірлеушілерге көрінеді)

Еске салайық, Java-да өзгерістер JEP «JDK Enhancement Proposal» енгізу арқылы жүзеге асырылады. JEP - OpenJDK жақсарту ұсынысы және мақұлдануы, кешіктірілуі немесе қабылданбауы мүмкін. Яғни, мәні бойынша JEP жинағы OpenJDK үшін даму стратегиясы болып табылады. Жаңа «мүмкіндік» алдында шаршы жақшада сәйкес JEP нөмірін көрсетеміз. [323] Lambda параметрлеріне арналған жергілікті айнымалы синтаксисі - lambda параметрлеріне арналған var синтаксисі Java 10 жергілікті айнымалының түрін нақты көрсетпеуге мүмкіндік беретін var кілт сөзін енгізді . Бұл codeты оңайлатты. JEP 323 осы синтаксисті ламбда өрнектерімен пайдалануды кеңейтеді. Қарапайым мысал:
list.stream ()
                 .map ((var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
Белгілі Java евангелисті Саймон Риттер жазғандай , тәжірибелі Java бағдарламашысы бұл жағдайда var пайдалану қажет емес екенін атап өтеді, өйткені жоғарыдағы codeты келесімен ауыстыруға болады:
list.stream ()
                  .map (s -> s.toLowerCase ())
                  .collect (Collectors.toList ());
Неліктен бар қолдау? Бір ғана ерекше жағдай бар - ламбда параметріне annotation қосқыңыз келгенде. Мұны қандай да бір түрді қолданбай орындау мүмкін емес және айқын түрді пайдаланбау үшін, біз келесідей var арқылы бәрін жеңілдетуге болады:
list.stream ()
                 .map ((@ Notnull var s) -> s.toLowerCase ())
                 .collect (Collectors.toList ());
[330] Бір файлды бастапқы codeты бағдарламаларды іске қосу Java бастапқы codeы бар бір файл ретінде бағдарламаны іске қосу үшін Java іске қосу құралын жақсарту Java өзінің егжей-тегжейлі синтаксисі және тіпті тривиальды қолданбаны іске қосудың көп сатылы «рәсімі» үшін жиі сынға алынады. Кейде бұл жаңадан келгендерді қорқытады. « Сәлем әлем! » деп басып шығаратын қосымшаны жазу үшін. «, сіз жалпыға ортақ статикалық негізгі әдісі бар сыныпты жазуыңыз керек voidжәне System.out.println. Осыны жасағаннан кейін javac көмегімен codeты құрастыру керек . Соңында, осыдан кейін сіз сәтсіз құттықтауларды көрсететін қолданбаны іске қоса аласыз (әрине, IDEA және JavaRush ішіне орнатылған интеграцияланған әзірлеу ортасы , бұл «қолданбаны іске қосу сиқырын» өздігінен орындайды - редактордың ескертпесі ). Шынын айтайық: көптеген бағдарламалау тілдерінде бағдарламаларды іске қосудың нақты сценарийі әлдеқайда қарапайым көрінеді. JEP 330 бір файлдық қолданбаны құрастыру қажеттілігін болдырмайды, сондықтан пәрмен жолын пайдалансаңыз, жай теріңіз.
java HelloWorld.java
Java іске қосу құралы файлда Java бастапқы codeы бар екенін анықтайды және оны орындау алдында codeты сынып файлына құрастырады. Параметрлерді бастапқы code файлының атынан кейін немесе алдына қоюға болады. Атаудан кейін қойылғандар қолданба орындалған кезде параметрлер ретінде беріледі. Атаудың алдында орналасқандар code құрастырылғаннан кейін Java іске қосу құралына параметр ретінде беріледі. Компиляторға тән опциялар (мысалы, сынып жолы) компиляция үшін 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 Client (стандартты) - HTTP Client API қолдауы стандартталған JDK 9 HTTP Client протоколын (JEP 110) қолдау үшін жаңа API енгізді . JDK 9 Java Platform Module System (JPMS) жүйесін де енгізгендіктен , бұл API инкубатор модулі ретінде қосылды (бұлар әзірлеушілерге Java SE жүйесінде әлі стандартты бола қоймаған жаңа API интерфейстерін қамтамасыз ететін модульдер, ал «тірі» API интерфейстері жасалуда. жоюға дайындалған - әзірлеушілер жаңа API интерфейстерін сынап көруі және кері байланыс беруге тырысуы мүмкін). Қажетті өзгертулер енгізілгеннен кейін (бұл API JDK 10-да жаңартылған), API стандарттың бөлігі бола алады. Сонымен, HTTP Client API енді ресми түрде Java SE 11 құрамына кіреді . Бұл JDK, java.net.http үшін жаңа модуль мен буманы ұсынады . Негізгі жаңа түрлері: HttpClient HttpRequest HttpResponse WebSocket Бұл API синхронды немесе асинхронды түрде пайдаланылуы мүмкін. Асинхронды режимде және пайдаланылады . [320] Java EE және CORBA модульдерін жою Java тоғызыншы нұсқасында Java платформалық модуль жүйесінің (JPMS) енгізілуімен монолитті rt.jar файлын бірнеше модульдерге бөлу мүмкін болды . Оған қоса, JPMS сізге қолданбаға қажет модульдерді ғана қамтитын Java орындалу ортасын жасауға мүмкіндік береді, бұл оның өлшемін айтарлықтай азайтады. Мөлдір анықталған модуль шекаралары арқылы Java API ескірген бөліктерін жою әлдеқайда оңай – JEP 320 осылай жасайды.Java.se.ee метамодульі Java SE 11 стандартының бөлігі болмайтын және қосылмайтын алты модульді қамтиды. JDK-де: CompletionFuturesCompletionStages
  • corba
  • транзакция
  • белсендіру
  • xml.bind
  • xml.ws
  • xml.ws.annotation
Бұл модульдер JDK 9 жүйесінде ескірген және әдепкі бойынша құрастыруға немесе орындауға қосылмаған. Бұл JDK 9 немесе JDK 10 нұсқаларында осы модульдердің API интерфейстерін пайдаланатын қолданбаны құрастыруға немесе іске қосуға әрекеттенсеңіз, ол сәтсіз аяқталды дегенді білдіреді. Кодыңызда осы модульдердің API интерфейстерін пайдалансаңыз, оларды бөлек модуль немесе кітапхана ретінде беруіңіз керек.

Жаңа API интерфейстері

Жаңа API интерфейстерінің үлкен саны JDK 11 тіл стандартына HTTP Client және Flight Recorder модульдерін қосудың арқасында пайда болды . API толық тізімін алу үшін Гуннар Морлинг құрастырған JDK әртүрлі нұсқаларының келесі толық салыстыруын қараңыз . Және бұл жазбада java.net.http , jdk.jfr және java.security модульдеріне кірмейтін кейбір жаңа әдістерді тізімдейміз . java.lang.String JDK 11 API жолындағы ең маңызды өзгерістердің бірі болуы мүмкін , бірнеше пайдалы жаңа әдістер бар.
  • boolean isBlank (): егер жол бос болса немесе тек бос орындар болса, шын мәнін қайтарады, әйтпесе жалған.

  • Stream lines(): Жол терминаторлары арқылы бөлінген осы жолдан алынған жолдар ағынын қайтарады.

  • String repeat (int): Мәні инт рет қайталанатын жолдың жалғауы болып табылатын жолды қайтарады.

  • String strip (): Бос орынсыз бірінші таңбадан бұрын немесе кейін жойылған барлық бос орындар бар жолды қайтарады.

  • String stripLeading (): бірінші бос орынсыз таңбаға дейінгі барлық бос орындар жойылған жолды қайтарады.

  • String stripTrainling (): Бос орынсыз соңғы таңба жойылғаннан кейін орын алатын барлық бос орындар бар жолды қайтарады.
strip()Әдіс бұрыннан ұқсас нәрсені жасады trim (), бірақ бос орындарда бұл әдістер әртүрлі нәрселерді білдіреді. Бұл жағдайда trim()тек бос орындар ғана кесіледі, ал ішінде strip()- сонымен қатар қойындылар сияқты арнайы таңбалар. java.lang.StringBuffer java.lang.StringBuilder Бұл сыныптардың екеуі де / compareTo ()қабылдайтын және қайтаратын жаңа әдісті қамтиды . Лексикалық салыстыру әдісі жаңа әдіске ұқсас . java.io.ByteArrayOutputStreamStringBufferStringBuilderintcompareTo() CharSequence
  • void writeBytes (byte []): параметрдің барлық byteтарын java.io.FileReader шығыс ағынына жазады
Мұнда анықтауға мүмкіндік беретін екі жаңа конструктор бар Charset. java.io.FileWriter t көрсетуге мүмкіндік беретін төрт жаңа конструктор Charse. java.io.InputStream
  • io.InputStream nullInputStream (): InputStreamешбір byteты оқымайтын қайтарады. Бұл әдісті қалай қолдануға болады? Сіз оны қажет емес шығысты тастау үшін немесе әрқашан нөл byteты қайтаратын енгізуді енгізу үшін /dev/null сияқты нәрсе ретінде қарастыра аласыз.
java.io.OutputStream
  • io.OutputStream nullOutputStream ()
java.io.Reader
  • io.Reader nullReader ()
java.io.Writer
  • io.Writer nullWriter ()
java.lang.Таңба
  • String toString (int): Бұл бар әдістің шамадан тыс жүктелуі, бірақ char орнына int қолданады.
java.lang.CharSequence
  • int compare (CharSequence, CharSequence): екі дананы лексикографиялық салыстырады CharSequence. Теріс мәнді, нөлді немесе оң мәнді қайтарады, егер бірінші рет лексикографиялық жағынан сәйкесінше екіншісінен кіші, оған тең немесе үлкен болса.
java.lang.ref.Анықтама
    lang.Object clone (): Java евангелист Саймон Риттер бұл әдіс оны шатастыратынын мойындайды. Класс Referenceинтерфейсті жүзеге асырмайды Cloneableжәне бұл әдіс әрқашан ерекше жағдайды шығарады CloneNotSupportedException. Дегенмен, сарапшы бұл әдіс болашақта бір нәрсеге пайдалы болады деп болжайды.
java.lang.Runtime java.lang.System Мұнда жаңа әдістер жоқ. runFinalizersOnExit ()Осы екі сыныптан да әдіс жойылғанын атап өтейік , бұл үйлесімділік мәселелерін тудыруы мүмкін. java.lang.Threaddestroy () Қосымша әдістер жоқ, біз олардың 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): Сәйкес арналары енгізу/шығару әрекеттеріне дайын пернелердегі әрекетті таңдайды және орындайды. Long параметрі күту уақыты болып табылады.

  • int select (java.util.function.Consumer): жоғарыдағы әдіс сияқты жұмыс істейді, бірақ күту уақытынсыз.

  • int selectNow (java.util.function.Consumer): жоғарыдағы әдіс сияқты жұмыс істейді, тек ол бұғатталмайды.

java.nio.file.Files
  • String readString (Path): UTF-8 codeтауының көмегімен byteтарды таңбаларға деcodeтау арқылы файлдағы барлық мазмұнды жолға оқиды .

  • String readString (Path, Charset): Жоғарыдағы әдіс сияқты жұмыс істейді, бірақ арқылы byteтарды таңбаларға деcodeтайды Charset.

  • Path writeString (Path, CharSequence, java.nio.file. OpenOption []): Егер файлға таңбалар тізбегін жазсаңыз CharSequence, бұл таңбалар byteтарға codeталады ( UTF-8 көмегімен ).

  • Path writeString (Path, CharSequence, java.nio.file. Charset, OpenOption []): жоғарыдағы әдіс сияқты жұмыс істейді, тек таңбалар арқылы byteтарға codeталған 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): берілген предикатты терістеу болып табылатын предикатты қайтарады.
Мысалы, келесі code:
lines.stream ()

.filter (s ->! s.isBlank ())
мынаған түрлендіруге болады:
lines.stream ()

.filter (Predicate.not (String :: ISBLANK))
және егер біз статикалық импортты қолданатын болсақ, онда біз мынаны аламыз:
lines.stream ()
.filter (not(String :: ISBLANK))
java.util.Қосымша java.util.OptionalInt java.util.OptionalDouble java.util.OptionalLong
  • boolean isEmpty (): Мән жоқ болса шын мәнін, әйтпесе жалған мәнін қайтарады .
java.util.regex.Pattern
  • Predicate asMatchPredicate (): Java сарапшысы Саймон Риттер мұнда жасырылған нақты JDK 11 API асыл тас болуы мүмкін деп санайды. Бұл әдіс осы үлгінің берілген енгізу жолына сәйкес келетінін тексеретін предикатты жасайды.
java.util.zip.Deflater
  • int deflate (ByteBuffer): Енгізілген деректерді қысады және көрсетілген буферді қысылған деректермен толтырады.

  • int deflate (ByteBuffer, int): Енгізілген деректерді қысады және көрсетілген буферді қысылған деректермен толтырады. Қысылған деректердің нақты көлемін қайтарады.

  • void setDictionary (ByteBuffer): Берілген буфердегі byteтарға қысылатын берілген сөздікті орнатады. ByteBufferБұл byte массивінен гөрі қазір қабылдай алатын бар әдістің шамадан тыс жүктелуі .

  • void setInput (ByteBuffer): Сығылатын кіріс деректерін орнатады. Бұл да бар әдісті шамадан тыс жүктеу.
java.util.zip.Inflater
  • int inflate (ByteBuffer): Байттарды көрсетілген буферге ашады. Сығылмаған byteтардың нақты санын қайтарады.

  • void setDictionary (ByteBuffer): Берілген сөздікті берілген буфердегі byteтарға орнатады. Қолданыстағы әдістің шамадан тыс жүктелген түрі.

  • 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-based Access Control 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());
      }
    }
Логикалық тұрғыдан ішкі класс сыртқы класс сияқты бір codeтың бөлігі болса да, ол жеке класс ретінде құрастырылған. Сондықтан бұл операция сыртқы сыныптың жеке өрісіне қатынасты қамтамасыз ету үшін компилятор арқылы жасалуы тиіс синтетикалық біріктіру әдісін қажет етеді . Бұл JEP бір ұяның екі мүшесі (біздің мысалда сыртқы және ішкі) ұя салатын достар болып табылатын ұялар тұжырымдамасын ұсынады. Сынып файл пішімі үшін екі жаңа атрибут анықталған: NestHost және NestMembers . Бұл өзгертулер кірістірілген сыныптар мен byte codeты қолдайтын басқа тілдер үшін пайдалы. Бұл функция java.lang.Class үшін үш жаңа әдісті ұсынады : Сынып getNestHost () Класс [] getNestMembers () логикалық isNestmateOf (Класс) [309] Динамикалық класс файлының тұрақтылары Бұл JEP жаңа файлды қолдау үшін сынып файл пішімінің кеңейтімін сипаттайды. тұрақты пул пішіні CONSTANT_Dynamic. Динамикалық тұрақты идеясы оксиморон сияқты көрінеді, бірақ оны Java 11-дегі соңғы мән ретінде қарастыруға болады. Біріктіру тұрақтысының мәні компиляция уақытында орнатылмайды (басқа тұрақтылардан айырмашылығы), бірақ жүктеу жолағын пайдаланады. жеткізу уақытындағы құнды анықтау әдісі. Сондықтан мән динамикалық, бірақ оның мәні тек бір рет орнатылғандықтан, ол да тұрақты. Бұл мүмкіндік ең алдымен JVM жүйесінде жұмыс істеу үшін byte codeтары мен сынып файлдарын жасайтын жаңа тілдерді және компиляторларды дамытатын адамдарға бағытталған. [315] Aarch64 Intrinsics жақсарту Бұл JEP Red Hat қауымдастығы ұсынған. JVM енді Arm 64 нұсқаулар жинағында қолжетімді көбірек мамандандырылған нұсқауларды пайдалана алады.Атап айтқандаsin () , бұл , әдістерінің және cos ()java.lang.Math log ()сыныбының өнімділігін жақсартады . [318] Epsilon: жұмыс істемейтін қоқыс жинағыш JEP 315 сияқты , Red Hat компаниясына Epsilon қоқыс жинағышын енгізгені үшін алғыс айта аласыз. Эпсилон әдеттен тыс, ол қоқыс жинамайды! Жаңа нысандарды жасау кезінде ол қажет болған жағдайда жадты бөледі, бірақ тіркелмеген нысандар алатын орынды қайтармайды. « Мәселе неде? «, - сен сұрадың. Бұл «қоқыс жинаудың» екі мақсаты бар екен:
  1. Ең алдымен, бұл қоқыс жинағыш жаңа GC алгоритмдерінің өнімділікке әсер ету тұрғысынан бағалануын қамтамасыз ету үшін жасалған. Идея - Epsilon көмегімен үлгі қолданбаны іске қосу және көрсеткіштер жинағын жасау. Қоқыс жинаудың жаңа алгоритмі қосылды, бірдей сынақтар орындалады, содан кейін нәтижелер салыстырылады.

  2. Үймеге бөлінген жадтан аспайтыныңызға кепілдік беретін өте қысқа тапсырмалар үшін (бұлттағы serverсіз функцияларды ойлаңыз). Бұл қолданба codeындағы үстеме шығындарды (соның ішінде коллекторды іске қосу-қосуды шешу үшін қажет статистиканы жинау) жою арқылы өнімділікті жақсарта алады. Үйме кеңістігі таусылған болса, JVM үш жолдың бірімен қате конфигурациялануы мүмкін:
    • Қалыпты деп аталады OutOfMemoryError.
    • Үйінді қалпына келтіруді орындаңыз
    • JVM қатты дискісі сәтсіз аяқталды және басқа тапсырманы орындауы мүмкін (мысалы, отладчикті іске қосу).
[328]: Flight Recorder Flight Recorder — JVM үшін төмен деңгейлі деректерді жинау жүйесі. JDK 11 нұсқасына дейін бұл Oracle JDK екілік жүйесіндегі коммерциялық мүмкіндік болды. Oracle қазір Oracle JDK мен OpenJDK бір құрастыру арасындағы функционалдық айырмашылықтарды жояды. Ұшу жазу құрылғысы не істейді :
  • Оқиғалар ретінде деректерді өндіру және тұтыну үшін API қамтамасыз етеді
  • Буферлік механизмді және екілік деректер пішімін қамтамасыз етеді
  • Оқиғаларды теңшеуге және сүзуге мүмкіндік береді
  • ОЖ, JVM HotSpot және JDK кітапханалары үшін оқиғаларды қамтамасыз етіңіз
Мұнда екі жаңа модуль бар: jdk.jfr және jdk.management.jfr . [329] ChaCha20 және Poly1305 криптографиялық алгоритмдері Бұл JEP JDK пайдаланатын шифрларды жаңарту туралы . Бұл жағдай RFC 7539-да көрсетілгендей ChaCha20 және ChaCha20-Poly1305 шифрлау алгоритмдерін жүзеге асырады. ChaCha20 ескі, қауіпті RC4 шифрын алмастыра алатын салыстырмалы түрде жаңа ағын шифры болып табылады . [333] ZGC: масштабталатын төмен кідірісті қоқыс жинағыш Эксперименттік масштабталатын төмен кідіріс қоқыс жинағыш. Үлкен (мультигигаbyte) үйме мен төмен кідірісті қажет ететін қолданбалармен пайдалануға арналған. Ол бір ұрпақ үйіндісін пайдаланады және қоқыс жинау жұмысының көпшілігін (бірақ барлығын емес) қолданбамен бір уақытта орындайды. [332] Transport Layer Security (TLS) 1.3 TLS 1.3 (RFC 8446) алдыңғы нұсқалармен салыстырғанда қауіпсіздік пен өнімділікті айтарлықтай жақсартуларды қамтамасыз ететін TLS тасымалдау деңгейінің қауіпсіздік протоколының негізгі патчі болып табылады. JDK енді осы протокол нұсқасын қолдайды. Материал Саймон Риттер мақаласына және ресми құжаттамаға негізделген .
Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION