Paglabas ng Java SE 14

Pagkatapos ng anim na buwan ng pag-unlad, Oracle pinakawalan platform JavaSE 14 (Java Platform, Standard Edition 14), ang open-source na OpenJDK na proyekto ay ginagamit bilang isang reference na pagpapatupad. Ang Java SE 14 ay nagpapanatili ng backward compatibility sa mga nakaraang release ng Java platform; lahat ng naunang naisulat na mga proyekto ng Java ay gagana nang walang pagbabago kapag tumakbo sa ilalim ng bagong bersyon. Ready-to-install Java SE 14 build (JDK, JRE at Server JRE) nakahanda para sa Linux (x86_64), Windows at macOS. Pagpapatupad ng sanggunian na binuo ng proyekto ng OpenJDK Java 14 ay ganap na open source sa ilalim ng lisensya ng GPLv2, na may mga pagbubukod sa GNU ClassPath na nagpapahintulot sa dynamic na pag-link sa mga komersyal na produkto.

Ang Java SE 14 ay inuri bilang pangkalahatang release ng suporta at patuloy na makakatanggap ng mga update hanggang sa susunod na release. Ang sangay ng Long Term Support (LTS) ay dapat na Java SE 11, na patuloy na makakatanggap ng mga update hanggang 2026. Ang nakaraang LTS branch ng Java 8 ay susuportahan hanggang Disyembre 2020. Ang susunod na paglabas ng LTS ay naka-iskedyul para sa Setyembre 2021. Paalalahanan ka namin na simula sa paglabas ng Java 10, lumipat ang proyekto sa isang bagong proseso ng pag-unlad, na nagpapahiwatig ng mas maikling cycle para sa pagbuo ng mga bagong release. Ang bagong functionality ay binuo na ngayon sa isang patuloy na ina-update na master branch, na kinabibilangan ng mga handa nang pagbabago at kung saan ang mga branch ay sinasanga bawat anim na buwan upang patatagin ang mga bagong release.

Ng mga inobasyon Java 14 maaari markahan:

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° pagtutugma ng pattern sa operator na "instanceof", na nagbibigay-daan sa iyong agad na tukuyin ang isang lokal na variable upang ma-access ang nasuri na halaga. Halimbawa, maaari mong isulat kaagad ang β€œif (obj instanceof String s && s.length() > 5) {.. s.contains(..) ..}” nang hindi tahasang tinutukoy ang β€œString s = (String) obj”.

    Ito ay:

    kung (obj instanceof Group) {
    Pangkat ng pangkat = (Pangkat) obj;
    var entries = group.getEntries();
    }

    Magagawa mo na ngayon nang walang kahulugan na "Group group = (Group) obj":

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

  • Π”ΠΎΠ±Π°Π²Π»Π΅Π½Π° ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«talaan", na nagbibigay ng isang compact na form para sa pagtukoy ng mga klase, na nagbibigay-daan sa iyong iwasan ang tahasang pagtukoy sa iba't ibang mga mababang antas na pamamaraan tulad ng equals(), hashCode() at toString() sa mga kaso kung saan ang data ay nakaimbak lamang sa mga field na ang pag-uugali ay hindi nagbabago. Kapag ang isang klase ay gumagamit ng mga karaniwang pagpapatupad ng equals(), hashCode() at toString() na mga pamamaraan, magagawa nito nang wala ang kanilang tahasang kahulugan:

    pampublikong record BankTransaction(LocalDate date,
    dobleng halaga
    Paglalarawan ng string) {}

    Ang deklarasyon na ito ay awtomatikong magdaragdag ng mga pagpapatupad ng equals(), hashCode() at toString() na mga pamamaraan bilang karagdagan sa mga pamamaraan ng constructor at getter.

  • Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΡ‹ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΉ Β«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;
    }
    };

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

    String html = " Β» +
    "\n\t" + " Β» +
    "\n\t\t" + " \"Narito na ang Java 1!\" Β» +
    "\n\t" + " Β» +
    "\n" + " ";

    maaari mong tukuyin:

    String html = """


    Β»Java 1\
    Nandito!

    """;

  • Π Π°ΡΡˆΠΈΡ€Π΅Π½Π° ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ диагностики ΠΏΡ€ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ 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.

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

Pinagmulan: opennet.ru

Magdagdag ng komento