Publikimi i Java SE 14

Pas gjashtë muajsh zhvillimi, kompania Oracle ka lançuar platformën Java SE 14 (Java Platform, Standard Edition 14), me projekti referencë e cila është përdorur për implementimin e saj është projekti hapur OpenJDK. Në Java SE 14 ruhet kompatibiliteti prapa me versionet e kaluara të platformës Java, të gjitha projektet Java të shkruara më parë do të funksionojnë pa ndryshime nën menaxhimin e versionit të ri. Grumbullimet gatishmëri për instalim të Java SE 14 (JDK, JRE dhe Server JRE) janë përgatitur për Linux (x86_64), Windows dhe macOS. Implementimi referencë i zhvilluar në kuadër të projektit OpenJDK Java 14 është plotësisht i hapur nën licencën GPLv2 me përjashtime të GNU ClassPath, që lejojnë lidhjen dinamike me produkte komerciale.

Java SE 14 i përket kategorisë së lëshimeve me mbështetje normale, përditësime për të cilat do të lëshohen deri në lëshimin e ardhshëm. Si një degë me mbështetje afatgjatë (LTS), duhet përdorur Java SE 11, përditësime për të cilat do të lëshohen deri në vitin 2026. Dega e kaluar LTS Java 8 do të mbështetet deri në Dhjetor 2020. Lëshimi i ardhshëm LTS është planifikuar për Shtator 2021. Të kujtojmë se që nga lëshimi i Java 10, projekti është kaluar në një proces të ri zhvillimi, që përfshin një cikël më të shkurtër formimi të lëshimeve të reja. Funksionaliteti i ri tani zhvillohet në një degë master që përditësohet vazhdimisht, në të cilën përfshihen ndryshime tashmë të gatshme dhe nga e cila çdo gjashtë muaj ndahen degë për stabilizimin e lëshimeve të reja.

Nga novitete Java 14 mund të shënohen:

  • ËshtĂ« shtuar mbĂ«shtetje eksperimentale tĂ« pĂ«rputhshmĂ«risĂ« me modelin nĂ« operatorin "instanceof", i cili lejon menjĂ«herĂ« tĂ« definihet njĂ« variabĂ«l lokale pĂ«r tĂ« aksesuar vlerĂ«n e kontrolluar. PĂ«r shembull, mund tĂ« shkruhet menjĂ«herĂ« "if (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}" pa nevojĂ«n pĂ«r definimin e qartĂ« "String s = (String) obj."

    Ishte:

    if (obj instanceof Group) {
    Group group = (Group) obj;
    var entries = group.getEntries();
    }

    Tani mund të kalojmë pa definimin "Group group = (Group) obj":

    if (obj instanceof Group group) {
    var entries = group.getEntries();
    }

  • ËshtĂ« shtuar mbĂ«shtetje eksperimentale pĂ«r fjalorin e ri "record", duke ofruar njĂ« formĂ« kompakte pĂ«r tĂ« pĂ«rcaktuar klasat, qĂ« lejon kalimin pa definimin e qartĂ« tĂ« metodave tĂ« ndryshme tĂ« nivelit tĂ« ulĂ«t, si equals(), hashCode() dhe toString(), nĂ« rastet kur tĂ« dhĂ«nat ruhet vetĂ«m nĂ« fushat, sjellja e tĂ« cilave nuk ndryshon. Kur nĂ« klasĂ« pĂ«rdoren implementimet tipike tĂ« metodave equals(), hashCode() dhe toString(), mund tĂ« kalojmĂ« pa definimin e tyre tĂ« qartĂ«:

    public record BankTransaction(LocalDate date,
    double amount,
    String description) {}

    Kjo deklaratë do të çojë në shtimin automatik të implementimeve të metodave equals(), hashCode() dhe toString() përveç konstruktorit dhe metodave që kontrollojnë ndryshimin e të dhënave (getter).

  • E standardizuar dhe Ă«shtĂ« aktivizuar si parazgjedhje mbĂ«shtetje pĂ«r formĂ«n e re tĂ« shprehjeve "switch", qĂ« nuk kĂ«rkon specifikimin e operatorit "break", duke lejuar kombimin e etiketimeve tĂ« pĂ«rsĂ«ritura dhe duke mundĂ«suar pĂ«rdorimin jo vetĂ«m si operator, por edhe si shprehje.

    var log = switch (event) {
    case PLAY -> "Kënga ka aktivizuar butonin e luajtjes";
    case STOP, PAUSE -> "Përdoruesi ka nevojë për një pushim";
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield "Ngjarje e panjohur " + message +
    " e regjistruar më " + now;
    }
    };

  • ËshtĂ« zgjeruar mbĂ«shtetje eksperimentale blloqet tekstore Ă«shtĂ« stabilizuar dhe futur nĂ« gjuhĂ« — pĂ«r formĂ«n e re tĂ« literave tĂ« vargut, duke lejuar pĂ«rfshirjen e tĂ« dhĂ«nave tekstuale me shumĂ« rreshta nĂ« kodin burimor pa pĂ«rdorimin e karaktereve tĂ« eklipsit dhe duke ruajtur formatimin origjinal tĂ« tekstit nĂ« bllok. Kufizimi i bllokut bĂ«het me tre cita tĂ« dyfishta. NĂ« Java 14, nĂ« blloqet tekstuale Ă«shtĂ« implementuar mbĂ«shtetje pĂ«r sekuencĂ«n e eklipsit "\s" pĂ«r tĂ« pĂ«rcaktuar njĂ« hap dhe "\" pĂ«r tĂ« pĂ«rfituar me rreshtin tjetĂ«r (injorimi i kalimit tĂ« rreshtit, kur duhet tĂ« shfaqet njĂ« varg shumĂ« tĂ« gjatĂ«). PĂ«r shembull, nĂ« vend tĂ« kodit

    String html = "" +
    "\n\t" + "" +
    "\n\t\t" + "

    \"Java 14 është këtu!\"" +
    "\n\t" + "" +
    "\n" + "";

    mund të specifikohet:

    String html = """
    <HTML>
    <BODY>

    "Java 14\
    është këtu!"


    <\/BODY>
    """;

  • Informacioni dijagnostikĂ« Ă«shtĂ« zgjeruar prilikom shfaqjes sĂ« pĂ«rjashtimeve NullPointerException. NĂ«se mĂ« parĂ« mesazhi i gabimit i referohej vetĂ«m numrit tĂ« rreshtit, tani u detajizohet se cili nga metodat shkaktoi pĂ«rjashtimin. Diagnostika e zgjeruar aktivizohet vetĂ«m kur ekzekutohet me flamurin «-XX:+ShowCodeDetailsInExceptionMessages». PĂ«r shembull, me caktimin e kĂ«tij flamuri, pĂ«rjashtimi nĂ« rreshtin

    var name = user.getLocation().getCity().getName();

    do të rezultojë në shfaqjen e mesazhit

    Exception in thread «main» java.lang.NullPointerException: Cannot invoke «Location.getCity()»
    because the return value of «User.getLocation()» is null
    at NullPointerExample.main(NullPointerExample.java:5):5)

    që lejon të kuptohet se metoda Location.getCity() nuk u thirr, dhe User.getLocation() ktheu një vlerë null.

  • Ă«shtĂ« realizuar versioni paraprak i utilitarit jpackage, qĂ« lejon krijimin e paketave pĂ«r aplikacione Java tĂ« vetĂ«-mjaftueshme (self-contained). Utilitari bazohet nĂ« javapackager nga JavaFX dhe lejon formimin e paketave nĂ« formate nativas pĂ«r platforma tĂ« ndryshme (msi dhe exe pĂ«r Windows, pkg dhe dmg pĂ«r macOS, deb dhe rpm pĂ«r Linux). Paketat pĂ«rfshijnĂ« tĂ« gjitha varĂ«sitĂ« e nevojshme.
  • NĂ« mbledhĂ«sin e integrimit G1 Ă«shtĂ« shtuar Ă«shtĂ« njĂ« mekanizĂ«m i ri i shpĂ«rndarjes sĂ« memories, qĂ« merr parasysh specifikat e punĂ«s nĂ« sisteme tĂ« mĂ«dha qĂ« pĂ«rdorin arkitekturĂ«n NUMA. ShpĂ«rndarĂ«si i ri i memories aktivizohet me flamurin «+XX:+UseNUMA» dhe lejon njĂ« rritje tĂ« konsiderueshme tĂ« performancĂ«s nĂ« sistemet NUMA.
  • Shtuar API pĂ«r ndjekjen e ngjarjeve JFR (JDK Flight Recorder) nĂ« kohĂ« reale, pĂ«r shembull pĂ«r organizimin e monitorimit tĂ« vazhdueshĂ«m.
  • Shtuar moduli jdk.nio.mapmode, qĂ« ofron mĂ«nyra tĂ« reja (READ_ONLY_SYNC, WRITE_ONLY_SYNC) pĂ«r krijimin e buferave tĂ« mapuar (MappedByteBuffer), qĂ« referohen nĂ« memorien e brezit tĂ« energjisĂ« (NVM).
  • Ă«shtĂ« realizuar versioni paraprak i API Foreign-Memory Access, qĂ« lejon aplikacionet Java tĂ« kenĂ« qasje tĂ« sigurt dhe efikase nĂ« zonat e memories jashtĂ« grumbullit Java, duke manipuluar abstraksionet e reja MemorySegment, MemoryAddress dhe MemoryLayout.
  • Deklaruar portal tĂ« vjetra pĂ«r OS Solaris dhe procesorĂ«t SPARC (Solaris/SPARC, Solaris/x64 dhe Linux/SPARC) me qĂ«llimin e heqjes sĂ« kĂ«tyre porteve nĂ« tĂ« ardhmen. Kalimi i kĂ«tyre porteve nĂ« statusin e vjetruar do t’i lejojĂ« komunitetit tĂ« nxitojĂ« zhvillimin e mundĂ«sive tĂ« reja OpenJDK, pa humbur kohĂ« nĂ« mbĂ«shtetje tĂ« veçorive specifike pĂ«r Solaris dhe SPARC.
  • Eliminuar mbledhĂ«si i plehrave CMS (Concurrent Mark Sweep), i cili dy vjet mĂ« parĂ« u shenjtua si i vjetruar dhe mbeti pa mbĂ«shtetje (nĂ« vend tĂ« CMS ka ardhur mbledhĂ«si i plehrave G1). PĂ«r mĂ« tepĂ«r, u shpall pĂ«rdorimi i kombinimeve tĂ« zakonshme tĂ« algoritmeve tĂ« mbledhjes sĂ« plehrave ParallelScavenge dhe SerialOld (nisja me opsionet „-XX:+UseParallelGC -XX:-UseParallelOldGC“).
  • ËshtĂ« siguruar mbĂ«shtetje eksperimentale pĂ«r mbledhĂ«sin e plehrave ZGC (Z Garbage Collector) nĂ« platformat macOS dhe Windows (mĂ« parĂ« ishte mbĂ«shtetur vetĂ«m nĂ« Linux). ZGC punon nĂ« njĂ« mod tĂ« pasivizuar, sa mĂ« shumĂ« qĂ« Ă«shtĂ« e mundur, minimizon vonesat pĂ«r shkak tĂ« mbledhjes sĂ« plehrave (koha e ndalimit gjatĂ« pĂ«rdorimit tĂ« ZGC nuk kalon 10 ms.) dhe mund tĂ« punojĂ« si me kupa tĂ« vogla ashtu edhe me kupa tĂ« mĂ«dha, nga disa qindra megabajt deri nĂ« shumĂ« terabajt.
  • Eliminuar instrumenti dhe API pĂ«r kompresimin e skedarĂ«ve JAR duke pĂ«rdorur algoritmin Pack200.

Burimi: opennet.ru

Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Blini hosting tĂ« besueshĂ«m pĂ«r faqe interneti me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster