Java SE 14 emissio

Post sex menses evolutionis, Oraculum dimisit suggestum XV Java Inter Aquilonem et Eurum (Java Platform, Latin Edition 14), Propositum aperti-fontis OpenJDK ad exsequendam relationem adhibetur. Java SE 14 convenientiam retrorsum conservat cum priorum emissione suggesti Javae, omnia incepta antea scripta Java sine mutationibus sub nova versione laborabunt. Promptus ad install Java SE 14 aedificat (JDK, JRE et Servo JRE) paratus pro Linux (x86_64), Fenestra et macOS. Exsecutio Relatio, quam explicata sunt in project OpenJDK Java 14 fons apertus est plene sub licentia GPLv2, cum exceptionibus GNU ClassPath permittens dynamicam conjunctionem cum productis commercialibus.

Java SE 14 in subsidiis emissionis generalis indicatur et updates recipere usque ad proximam emissionem perget. Ramus Long Term Support (LTS) debet esse Java SE 11, qui perget usque ad 2026 updates recipere. Praecedens LTS germen Javae 8 usque ad Decembrem 2020 sustentabitur. Proxima LTS emissio pro Septembri 2021 horarium est. Commonefaciamus te quod incipiens a emissione Javae X, consilium commutavit ad novum processum evolutionis, implicando breviorem cyclum ad novas emissiones formandas. Nova functionality nunc in uno constanter renovato ramo magistri evolvitur, quod includit mutationes paratas factas et e quibus singulis sex mensibus rami ramosi ad novas solutiones stabiliendas.

ex innovations Java 14 potes Mark:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° forma matching in "instantia" operantis, quod permittit ut statim definias variam localem ad valorem sedatus accedere. Exempli gratia, statim scribere potes "si (obj instance of String s && s.length()) > 5) {.. s. continet(..) ..}" sine definite "String s = (String) obj".

    Erat;

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

    Nunc sine definitione "Group = (Group) obj" facere potes:

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

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«record", quae dat formam pactam definiendi classes, quae eliminat necessitatem explicandi varios modos humiles, ut sunt pares(), hashCode(), et toString(), in casibus in quibus notitia reponitur solum in agris quorum mores agit not muto. Cum genus vexillum utitur exsecutionibus aequalium (), hashCode () et methodis String() adhibitis, sine expressa eorum definitione facere potest:

    publici instrumenti BankTransaction(LocalDate date,
    duplex moles
    Linea descriptio {}

    Haec declaratio sponte addet exsecutiones aequalium (), hashCode () et modos stringendi () modos constructor et emolumenta.

  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Β«switchΒ», Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅ΠΉ указания ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° Β«breakΒ», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡ‚ΡŒ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰ΠΈΠ΅ΡΡ ΠΌΠ΅Ρ‚ΠΊΠΈ ΠΈ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‰Π΅ΠΉ использованиС Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ„ΠΎΡ€ΠΌΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π½ΠΎ ΠΈ ΠΊΠ°ΠΊ выраТСния.

    var log = switch (event) {
    case PLAY -> Β«User has triggered the play buttonΒ»;
    case STOP, PAUSE -> Β«User needs a breakΒ»;
    default -> {
    String message = event.toString();
    LocalDateTime now = LocalDateTime.now();
    yield Β«Unknown event Β» + message +
    Β» logged on Β» + now;
    }
    };

  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° text caudices β€” Π½ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ строковых Π»ΠΈΡ‚Π΅Ρ€Π°Π»ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΡ… Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ Π² исходный ΠΊΠΎΠ΄ многострочныС тСкстовыС Π΄Π°Π½Π½Ρ‹Π΅ Π±Π΅Π· примСнСния Π² Π½ΠΈΡ… экранирования символов ΠΈ сохраняя исходноС форматирования тСкста Π² Π±Π»ΠΎΠΊΠ΅. ΠžΠ±Ρ€Π°ΠΌΠ»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠ° осущСствляСтся трСмя Π΄Π²ΠΎΠΉΠ½Ρ‹ΠΌΠΈ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ. Π’ Java 14 Π² тСкстовых Π±Π»ΠΎΠΊΠ°Ρ… Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° escape-ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Β«\sΒ» для опрСдСлСния ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ±Π΅Π»Π° ΠΈ Β«\Β» для объСдинСния со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ строкой (игнорирования ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ вывСсти ΠΎΡ‡Π΅Π½ΡŒ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ строку). НапримСр, вмСсто ΠΊΠΎΠ΄Π°

    String html = " Β» +
    "\n\t" + " Β» +
    "\n\t\t" + " \"Java 1 adest!\" Β» +
    "\n\t" + " Β» +
    " \n " + " Β»;

    specificare potes:

    String html = ""


    Β» Java 1\.
    adest!

    """;

  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ диагностики ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ NullPointerException. Если Ρ€Π°Π½ΡŒΡˆΠ΅ сообщСниС ΠΎΠ± ошибкС лишь ΡΡΡ‹Π»Π°Π»ΠΎΡΡŒ Π½Π° Π½ΠΎΠΌΠ΅Ρ€ строки, Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π² Π½Ρ‘ΠΌ дСтализируСтся ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠ· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π²Ρ‹Π·Π²Π°Π» ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅. Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Π°Ρ диагностика ΠΏΠΎΠΊΠ° Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ запускС с Ρ„Π»Π°Π³ΠΎΠΌ Β«-XX:+ShowCodeDetailsInExceptionMessagesΒ». НапримСр, ΠΏΡ€ΠΈ ΡƒΠΊΠ°Π·Π°Π½ΠΈΠΈ Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ„Π»Π°Π³Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π² строкС

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

    ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Ρ‚ ΠΊ Π²Ρ‹Π²ΠΎΠ΄Ρƒ сообщСния

    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)

    ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΏΠΎΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄ Location.getCity() Π½Π΅ Π±Ρ‹Π» Π²Ρ‹Π·Π²Π°Π½, Π° User.getLocation() Π²Π΅Ρ€Π½ΡƒΠ» Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ null.

  • implemented ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ jpackage, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ для самодостаточных (self-contained) Java-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π° базируСтся Π½Π° javapackager ΠΈΠ· JavaFX ΠΈ позволяСт Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…, Ρ€ΠΎΠ΄Π½Ρ‹Ρ… для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌ (msi ΠΈ exe для Windows, pkg ΠΈ dmg для macOS, deb ΠΈ rpm для Linux). ΠŸΠ°ΠΊΠ΅Ρ‚Ρ‹ Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ зависимости.
  • Π’ сборщик мусора G1 additae Π½ΠΎΠ²Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ распрСдСлСния памяти, ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ спСцифику Ρ€Π°Π±ΠΎΡ‚Ρƒ Π½Π° ΠΊΡ€ΡƒΠΏΠ½Ρ‹Ρ… систСмах, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ NUMA. Новый Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ памяти Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„Π»Π°Π³Π° Β«+XX:+UseNUMAΒ» ΠΈ позволяСт сущСствСнно ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π° NUMA-систСмах.
  • adiecit API для отслСТивания Π½Π° Π»Π΅Ρ‚Ρƒ событий JFR (JDK Flight Recorder), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ для ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠ³ΠΎ ΠΌΠΎΠ½ΠΈΡ‚ΠΎΡ€ΠΈΠ½Π³Π°.
  • adiecit ΠΌΠΎΠ΄ΡƒΠ»ΡŒ jdk.nio.mapmode, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ (READ_ONLY_SYNC, WRITE_ONLY_SYNC) для создания ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ²Ρ‹Ρ… Π±ΡƒΡ„Π΅Ρ€ΠΎΠ² (MappedByteBuffer), ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° ΡΠ½Π΅Ρ€Π³ΠΎΠ½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ (NVM).
  • implemented ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ API Foreign-Memory Access, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Java-прилоТСниям бСзопасно ΠΈ эффСктивно ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ областям памяти, Π²Π½Π΅ ΠΊΡƒΡ‡ΠΈ Java, манипулируя Π½ΠΎΠ²Ρ‹ΠΌΠΈ абстракциями MemorySegment, MemoryAddress ΠΈ MemoryLayout.
  • ΠžΠ±ΡŠΡΠ²Π»Π΅Π½Ρ‹ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌΠΈ ΠΏΠΎΡ€Ρ‚Ρ‹ для ОБ Solaris ΠΈ процСссоров SPARC (Solaris/SPARC, Solaris/x64 ΠΈ Linux/SPARC) c Π½Π°ΠΌΠ΅Ρ€Π΅Π½ΠΈΠ΅ΠΌ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΡ€Ρ‚Ρ‹ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΡ€Ρ‚ΠΎΠ² Π² разряд ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ сообщСству ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π½ΠΎΠ²Ρ‹Ρ… возмоТностСй OpenJDK, Π½Π΅ тратя врСмя Π½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ особСнностСй, спСцифичных для Solaris ΠΈ SPARC.
  • Deletum сборщик мусора CMS (Concurrent Mark Sweep), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄ Π±Ρ‹Π» ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΈ остался Π±Π΅Π· сопровоТдСния (Π½Π° смСну CMS Π΄Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΡˆΡ‘Π» сборщик мусора G1). ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, nuntiatum ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² сборки мусора ParallelScavenge ΠΈ SerialOld (запуск с опциями Β«-XX:+UseParallelGC -XX:-UseParallelOldGCΒ»).
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° сборщика мусора ZGC (Z Garbage Collector) Π½Π° ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ… macOS ΠΈ Windows (Ρ€Π°Π½Π΅Π΅ поддСрТивался Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Linux). ZGC Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π² пассивном Ρ€Π΅ΠΆΠΈΠΌΠ΅, насколько это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈΠ·-Π·Π° сборки мусора (врСмя остановки ΠΏΡ€ΠΈ использовании ZGC Π½Π΅ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Π΅Ρ‚ 10 мс.) ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ с нСбольшими, Ρ‚Π°ΠΊ ΠΈ с ΠΎΠ³Ρ€ΠΎΠΌΠ½Ρ‹ΠΌΠΈ ΠΊΡƒΡ‡Π°ΠΌΠΈ, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΎΡ‚ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… сотСн ΠΌΠ΅Π³Π°Π±Π°ΠΉΡ‚ Π΄ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚.
  • remotum инструмСнтарий ΠΈ API для сТатия JAR-Ρ„Π°ΠΉΠ»ΠΎΠ² с использованиСм Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° Pack200.

Source: opennet.ru