Java SE 15-ի թողարկում

Վեց ամիս զարգացումից հետո Oracle ազատ է արձակվել մի հարթակ JavaSE 15 (Java պլատֆորմ, ստանդարտ հրատարակություն 15), բաց կոդով OpenJDK նախագիծն օգտագործվում է որպես հղման իրականացում: Java SE 15-ը պահպանում է հետամնաց համատեղելիությունը Java պլատֆորմի նախորդ թողարկումների հետ; բոլոր նախկինում գրված Java նախագծերը կաշխատեն առանց փոփոխությունների, երբ գործարկվեն նոր տարբերակով: Java SE 15-ի տեղադրման պատրաստի կառուցումներ (JDK, JRE և Server JRE) պատրաստված Linux-ի (x86_64), Windows-ի և macOS-ի համար: Հղումների իրականացում, որը մշակվել է OpenJDK նախագծի կողմից Java 15- ը լիովին բաց կոդով է GPLv2 լիցենզիայի ներքո, GNU ClassPath բացառություններով, որոնք թույլ են տալիս դինամիկ կապ հաստատել առևտրային ապրանքների հետ:

Java SE 15-ը դասակարգվում է որպես ընդհանուր աջակցության թողարկում և կշարունակի թարմացումներ ստանալ մինչև հաջորդ թողարկումը: Երկարաժամկետ աջակցության (LTS) մասնաճյուղը պետք է լինի Java SE 11, որը կշարունակի թարմացումներ ստանալ մինչև 2026 թվականը: Java 8-ի նախորդ LTS մասնաճյուղը կաջակցվի մինչև 2020 թվականի դեկտեմբեր: LTS-ի հաջորդ թողարկումը նախատեսված է 2021 թվականի սեպտեմբերին: Հիշեցնենք, որ Java 10-ի թողարկումից սկսած՝ նախագիծն անցավ զարգացման նոր գործընթացի՝ ենթադրելով ավելի կարճ ցիկլ նոր թողարկումների ձևավորման համար։ Նոր ֆունկցիոնալությունն այժմ մշակվում է մեկ անընդհատ թարմացվող գլխավոր մասնաճյուղում, որը ներառում է պատրաստի փոփոխություններ և որից մասնաճյուղերը բաժանվում են յուրաքանչյուր վեց ամիսը մեկ՝ նոր թողարկումները կայունացնելու համար:

Of նորամուծություններ Java 15- ը կարելի նշան:

  • Ներկառուցված աջակցություն EdDSA (Edwards-Curve Digital Signature Algorithm) թվային ստորագրության ստեղծման ալգորիթմին RFC 8032) Առաջարկվող EdDSA իրականացումը կախված չէ ապարատային հարթակներից, պաշտպանված է կողային ալիքի հարձակումներից (ապահովված է բոլոր հաշվարկների մշտական ​​ժամանակը) և կատարողականով ավելի արագ է, քան գոյություն ունեցող ECDSA-ն, որը գրված է C լեզվով, պաշտպանության նույն մակարդակով: Օրինակ, EdDSA-ն, օգտագործելով էլիպսային կորը 126-բիթանոց բանալիով, ցուցադրում է ECDSA-ի նման կատարումը secp256r1 էլիպսային կորով և 128-բիթանոց ստեղնով:
  • Ավելացված է փորձարարական աջակցություն կնքված դասերի և ինտերֆեյսերի համար, որոնք չեն կարող օգտագործվել այլ դասերի և միջերեսների կողմից՝ ժառանգելու, ընդլայնելու կամ իրականացումը վերացնելու համար: Կնքված դասերը նաև ապահովում են գերդասերի օգտագործումը սահմանափակելու ավելի դեկլարատիվ եղանակ, քան մուտքի մոդիֆիկատորները՝ հիմնվելով ընդլայնման համար թույլատրված ենթադասերի հստակ ցուցակագրման վրա:

    փաթեթ com.example.geometry;

    հանրային կնքված դասի ձև
    permits com.example.polar.Circle,
    com.example.quad.Rectangle,
    com.example.quad.simple.Square {…}

  • Ավելացված է աջակցություն թաքնված դասերի համար, որոնք չեն կարող ուղղակիորեն օգտագործվել այլ դասերի բայթկոդով: Թաքնված դասերի հիմնական նպատակն է օգտագործվել շրջանակներում, որոնք դինամիկ կերպով ստեղծում են դասեր գործարկման ժամանակ և օգտագործում են դրանք անուղղակիորեն՝ միջոցով արտացոլումը. Նման դասերը սովորաբար ունեն սահմանափակ կյանքի ցիկլ, ուստի ստատիկորեն գեներացվող դասերից դրանց հասանելիության պահպանումը արդարացված չէ և միայն կհանգեցնի հիշողության սպառման ավելացման: Թաքնված դասերը նաև վերացնում են sun.misc.Unsafe::defineAnonymousClass ոչ ստանդարտ API-ի անհրաժեշտությունը, որը նախատեսվում է հեռացնել ապագայում:
  • ZGC (Z Garbage Collector) աղբահավաքիչը կայունացվել է և ճանաչվել է որպես պատրաստ լայնածավալ օգտագործման համար: ZGC-ն աշխատում է պասիվ ռեժիմով, հնարավորինս նվազագույնի է հասցնում աղբահանության հետ կապված հետաձգումը (ZGC-ի օգտագործման ժամանակ փակման ժամանակը չի գերազանցում 10 ms.) և կարող է աշխատել ինչպես փոքր, այնպես էլ հսկայական կույտերի հետ՝ մի քանի հարյուր մեգաբայթից մինչև շատ տերաբայթ չափերով:
  • Կայունացված և պատրաստ է ընդհանուր օգտագործման համար
    աղբահավաք Շենանդա, աշխատելով նվազագույն դադարներով (Low-Pause-Time Garbage Collector): Shenandoah-ը մշակվել է Red Hat-ի կողմից և աչքի է ընկնում ալգորիթմի օգտագործմամբ, որը նվազեցնում է աղբահանության ժամանակ փակման ժամանակը Java-ի հավելվածների կատարմանը զուգահեռ մաքրման միջոցով: Աղբահավաքի կողմից ներդրված ուշացումների չափը կանխատեսելի է և կախված չէ կույտի չափից, այսինքն. 200 ՄԲ և 200 ԳԲ կույտերի համար ուշացումները կլինեն նույնական (դուրս մի՛ եկեք 50 ms-ից ավելի և սովորաբար 10 ms-ի սահմաններում);

  • Աջակցությունը կայունացվել և ներդրվել է լեզվի մեջ տեքստային բլոկներ - տողային բառացիների նոր ձև, որը թույլ է տալիս ներառել բազմատող տեքստային տվյալներ սկզբնաղբյուրում` առանց նիշերի փախչելու և բլոկում բնօրինակ տեքստի ձևաչափումը պահպանելու: Բլոկը շրջանակված է երեք կրկնակի չակերտներով:

    Օրինակ՝ կոդի փոխարեն

    Տող html = " » +
    "\n\t" + " » +
    «\n\t\t» + " \"Java 1-ն այստեղ է\" » +
    "\n\t" + " » +
    "\n" + " «;

    կարող եք նշել.

    String html = """


    »Java 1\
    այստեղ է!

    """;

  • Վերանախագծված Legacy DatagramSocket API: java.net.DatagramSocket-ի և java.net.MulticastSocket-ի հին իրականացումները փոխարինվել են ժամանակակից ներդրմամբ, որն ավելի հեշտ է կարգաբերել և պահպանել, ինչպես նաև համատեղելի է նախագծի շրջանակներում մշակված վիրտուալ հոսքերի հետ: Լոմ. Գոյություն ունեցող կոդի հետ հնարավոր անհամատեղելիության դեպքում հին իրականացումը չի հեռացվել և կարող է միացվել jdk.net.usePlainDatagramSocketImpl տարբերակի միջոցով։
  • Առաջարկվում է երկրորդ փորձարարական իրականացում օրինաչափությունների համապատասխանություն «instanceof» օպերատորում, որը թույլ է տալիս անմիջապես սահմանել տեղական փոփոխական՝ ստուգված արժեքին մուտք գործելու համար: Օրինակ, դուք կարող եք անմիջապես գրել «if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}» առանց հստակ սահմանելու «String s = (String) obj»:

    էր.

    եթե (խմբի օբյեկտ) {
    Խմբային խումբ = (Group)obj;
    var մուտքեր = group.getEntries();
    }

    Այժմ դուք կարող եք անել առանց «Խմբային խումբ = (Խումբ) obj» սահմանման.

    եթե (Խմբի խմբի օբյեկտ) {
    var մուտքեր = group.getEntries();
    }

  • Առաջարկվում է բանալի բառի երկրորդ փորձարարական իրականացումգրառում", որն ապահովում է դասերի սահմանման կոմպակտ ձև, որը թույլ է տալիս խուսափել ցածր մակարդակի տարբեր մեթոդների հստակ սահմանումից, ինչպիսիք են equals(), hashCode() և toString() այն դեպքերում, երբ տվյալները պահվում են միայն դաշտերում, որոնց վարքագիծը չի փոխվում: Երբ դասը օգտագործում է equals(), hashCode() և toString() մեթոդների ստանդարտ իրականացումները, այն կարող է անել առանց դրանց հստակ սահմանման.

    Բանկային գործարքի հանրային գրառում (Տեղական ամսաթիվ,
    կրկնակի գումար
    Լարի նկարագրություն) {}

    Այս հայտարարությունը ավտոմատ կերպով կավելացնի հավասար(), hashCode() և toString() մեթոդների իրականացումները՝ ի լրումն կառուցողի և ստացողի մեթոդների:

  • Առաջարկվում է Foreign-Memory Access API-ի երկրորդ նախադիտումը, որը Java հավելվածներին թույլ է տալիս ապահով և արդյունավետ մուտք գործել հիշողության տարածքներ Java կույտից դուրս՝ շահարկելով նոր MemorySegment, MemoryAddress և MemoryLayout աբստրակցիաները:
  • Անաշխատունակ և հնացել է Biased Locking-ի օպտիմալացման տեխնիկան, որն օգտագործվում էր HotSpot JVM-ում՝ կողպման վերին ծախսերը նվազեցնելու համար: Այս տեխնիկան կորցրել է իր արդիականությունը ժամանակակից պրոցեսորների կողմից տրված ատոմային հրահանգներով համակարգերի վրա և չափազանց աշխատատար է դրա պահպանման համար՝ իր բարդության պատճառով:
  • Հայտարարվել է հնացած մեխանիզմ RMI ակտիվացում, որը կհեռացվի ապագա թողարկումում: Նշվում է, որ RMI Activation-ը հնացած է, դասակարգվում է Java 8-ի տարբերակի կատեգորիային և գրեթե երբեք չի օգտագործվում ժամանակակից պրակտիկայում:
  • Ջնջված է JavaScript շարժիչ Նաշորն, որը հնացած էր Java SE 11-ում։
  • Ջնջված է պորտեր Solaris OS և SPARC պրոցեսորների համար (Solaris/SPARC, Solaris/x64 և Linux/SPARC): Այս նավահանգիստների հեռացումը թույլ կտա համայնքին արագացնել OpenJDK-ի նոր հնարավորությունների զարգացումը առանց ժամանակ վատնելու Solaris-ի և SPARC-ի հատուկ առանձնահատկությունները պահպանելու համար:

Source: opennet.ru

Добавить комментарий