wydanie Javy SE 14

Po sześciu miesiącach rozwoju Oracle wydany platforma Jawa SE 14 (Java Platform, Standard Edition 14), projekt OpenJDK o otwartym kodzie źródłowym służy jako implementacja referencyjna. Java SE 14 zachowuje kompatybilność wsteczną z poprzednimi wydaniami platformy Java; wszystkie wcześniej napisane projekty Java będą działać bez zmian po uruchomieniu w nowej wersji. Gotowe do instalacji kompilacje Java SE 14 (JDK, JRE i Server JRE) przygotowany dla systemu Linux (x86_64), Windows i macOS. Implementacja referencyjna opracowana w ramach projektu OpenJDK Java 14 jest w pełni open source na licencji GPLv2, z wyjątkami GNU ClassPath umożliwiającymi dynamiczne łączenie z produktami komercyjnymi.

Java SE 14 jest klasyfikowana jako zwykła wersja wsparcia i będzie otrzymywać aktualizacje aż do następnej wersji. Gałązką wsparcia długoterminowego (LTS) powinna być Java SE 11, która będzie otrzymywać aktualizacje do 2026 roku. Poprzednia gałąź LTS Java 8 będzie obsługiwana do grudnia 2020 r. Następna wersja LTS zaplanowana jest na wrzesień 2021 r. Przypomnijmy, że począwszy od wydania Java 10, projekt przeszedł na nowy proces rozwoju, co oznacza krótszy cykl tworzenia nowych wydań. Nowa funkcjonalność jest obecnie rozwijana w jednej, stale aktualizowanej gałęzi głównej, która zawiera gotowe zmiany i z której co sześć miesięcy odgałęziają się gałęzie w celu stabilizacji nowych wydań.

Z innowacje Java 14 można znak:

  • Dodano wsparcie eksperymentalne dopasowanie wzoru w operatorze „instanceof”, który umożliwia natychmiastowe zdefiniowanie zmiennej lokalnej umożliwiającej dostęp do sprawdzanej wartości. Na przykład możesz od razu napisać „if (obj instancja String s && s.length() > 5) {.. s.contains(..) ..}” bez jawnego definiowania „String s = (String) obj”.

    To było:

    if (instancja obiektu grupy) {
    Grupa grupa = (Grupa) obiekt;
    var wpisy = group.getEntries();
    }

    Teraz możesz obejść się bez definicji „Grupa grupowa = (Grupa) obj”:

    if (instancja obiektu grupy grupa) {
    var wpisy = group.getEntries();
    }

  • Dodano eksperymentalną obsługę nowego słowa kluczowego „rekord", który zapewnia zwartą formę definiowania klas, pozwalającą uniknąć jawnego definiowania różnych metod niskiego poziomu, takich jak równości(), hashCode() i toString() w przypadkach, gdy dane są przechowywane tylko w polach, których zachowanie się nie zmienia. Kiedy klasa używa standardowych implementacji metod równości(), hashCode() i toString(), może obejść się bez ich wyraźnej definicji:

    publiczny rekord BankTransaction (data LocalDate,
    podwójna ilość
    Opis ciągu) {}

    Ta deklaracja automatycznie doda implementacje metod równości(), hashCode() i toString() oprócz metod konstruktora i gettera.

  • Standaryzowane oraz domyślnie włączona jest obsługa nowej formy wyrażeń „switch”, która nie wymaga podawania operatora „break”, pozwala na łączenie powtarzających się etykiet i może być używana nie tylko w formie operatora, ale także jako wyrażenie.

    var log = przełącznik (zdarzenie) {
    przypadek PLAY -> „Użytkownik nacisnął przycisk odtwarzania”;
    przypadek STOP, PAUZA -> „Użytkownik potrzebuje przerwy”;
    domyślny -> {
    Wiadomość tekstowa = wydarzenie.toString();
    LocalDateTime teraz = LocalDateTime.now();
    wynik „Nieznane zdarzenie” + wiadomość +
    » zalogowany » + teraz;
    }
    };

  • Rozszerzone wsparcie eksperymentalne bloki tekstowe — nowa forma literałów łańcuchowych, która pozwala na włączenie do kodu źródłowego wielowierszowych danych tekstowych bez stosowania zmiany znaczenia znaków i zachowania oryginalnego formatowania tekstu w bloku. Blok jest otoczony trzema podwójnymi cudzysłowami. W Javie 14 bloki tekstu obsługują teraz sekwencję ucieczki „\s” w celu zdefiniowania pojedynczej spacji i „\ w celu połączenia z następną linią (ignorowanie znaków nowej linii, gdy trzeba wydrukować bardzo długą linię). Na przykład zamiast kodu

    Ciąg HTML = " » +
    "\n\t" + " » +
    "\n\t\t" + " „Java 1 jest już dostępna!” » +
    "\n\t" + " » +
    "\n" + " ";

    możesz określić:

    Ciąg html = """


    »Java 1\
    jest tutaj!

    „””;

  • Rozszerzono zawartość informacyjną diagnostyki w przypadku wystąpienia wyjątków wyjątek NullPointerException. Podczas gdy poprzednio komunikat o błędzie odnosił się tylko do numeru wiersza, teraz zawiera szczegółowe informacje, która metoda spowodowała wyjątek. Zaawansowana diagnostyka jest obecnie włączona tylko po uruchomieniu z flagą „-XX:+ShowCodeDetailsInExceptionMessages”. Na przykład podczas określania tej flagi wyjątek w linii

    nazwa zmiennej = użytkownik.getLocation().getCity().getName();

    spowoduje wyświetlenie komunikatu

    Wyjątek w wątku „main” java.lang.NullPointerException: Nie można wywołać „Location.getCity()”
    ponieważ wartość zwracana przez „User.getLocation()” ma wartość null
    w NullPointerExample.main(NullPointerExample.java:5):5)

    co wyjaśnia, że ​​metoda Location.getCity() nie została wywołana, a User.getLocation() zwróciła wartość null.

  • Wdrożone Podgląd narzędzia jpackage, które umożliwia tworzenie pakietów dla samodzielnych aplikacji Java. Narzędzie opiera się na javapackager z JavaFX i umożliwia tworzenie pakietów w formatach natywnych dla różnych platform (msi i exe dla Windows, pkg i dmg dla macOS, deb i obr./min dla Linuksa). Pakiety zawierają wszystkie wymagane zależności.
  • Do śmieciarza G1 dodany nowy mechanizm alokacji pamięci uwzględniający specyfikę pracy na dużych systemach korzystających z tej architektury NUMA. Nowy alokator pamięci jest włączany za pomocą flagi „+XX:+UseNUMA” i może znacznie poprawić wydajność w systemach NUMA.
  • обавлен API do bieżącego monitorowania zdarzeń JFR (JDK Flight Recorder), na przykład do organizowania ciągłego monitoringu.
  • обавлен moduł jdk.nio.mapmode, który oferuje nowe tryby (READ_ONLY_SYNC, WRITE_ONLY_SYNC) do tworzenia mapowanych buforów bajtowych (MappedByteBuffer) odwołujących się do pamięci nieulotnej (NVM).
  • Wdrożone Wersja zapoznawcza interfejsu API dostępu do pamięci zagranicznej, umożliwiającego aplikacjom Java bezpieczny i wydajny dostęp do obszarów pamięci poza stertą Java poprzez manipulowanie nowymi abstrakcjami MemorySegment, MemoryAddress i MemoryLayout.
  • Ogłoszony przestarzałe porty dla procesorów Solaris OS i SPARC (Solaris/SPARC, Solaris/x64 i Linux/SPARC) z zamiarem usunięcia tych portów w przyszłości. Wycofanie tych portów umożliwi społeczności przyspieszenie rozwoju nowych funkcji OpenJDK bez marnowania czasu na utrzymywanie funkcji specyficznych dla systemów Solaris i SPARC.
  • REMOVED moduł zbierający elementy bezużyteczne CMS (Concurrent Mark Sweep), który dwa lata temu został uznany za przestarzały i pozostał niekonserwowany (CMS został dawno temu zastąpiony modułem wyrzucającym elementy bezużyteczne G1). Oprócz, ogłoszony przestarzałe użycie kombinacji algorytmów usuwania śmieci ParallelScavenge i SerialOld (uruchamiane z opcjami „-XX:+UseParallelGC -XX:-UseParallelOldGC”).
  • Eksperymentalna obsługa modułu zbierającego elementy bezużyteczne ZGC (Z Garbage Collector) została udostępniona na platformach macOS i Windows (wcześniej obsługiwana tylko w systemie Linux). ZGC działa w trybie pasywnym, maksymalnie minimalizuje opóźnienia spowodowane zbieraniem śmieci (czas przestoju przy użyciu ZGC nie przekracza 10 ms.) i może pracować zarówno z małymi, jak i dużymi stertami, o wielkości od kilkuset megabajtów do wielu terabajtów.
  • Usunięto Zestaw narzędzi i API do kompresji plików JAR przy użyciu algorytmu Pack200.

Źródło: opennet.ru

Dodaj komentarz