Funkcje i ulepszenia Java 9



Modułowa struktura opracowana w ramach projektu Jigsaw i główne funkcje Java 9 na tym blogu to JShell (narzędzie REPL), ważne zmiany API i zmiany na poziomie JVM.

Wydanie funkcji Java 9 i Java 9 jest kamieniem milowym dla ekosystemu Java.Nadążanie za nowymi wydaniami jest ważne, aby być na bieżąco z technologią, a zrozumienie potrzeb związanych z tym, co zostanie wprowadzone, zbliży Cię do .Modułowa platforma opracowana w ramach projektu Jigsaw będzie częścią tej wersji Java SE, a jej główne funkcje to JShell (narzędzie REPL), ważne zmiany API i zmiany na poziomie JVM w celu poprawy wydajności i możliwości debugowania JVM.

Zanim szczegółowo rozwiążemy funkcje Java 9, rzućmy okiem na poprzednie wersje Java i zobaczmy, jakie były niedociągnięcia i jak Java 9 pomogła przezwyciężyć te anomalie: -





  • Platforma Java Standard Edition i JDK nie były obsługiwane przez małe urządzenia komputerowe
  • Nie było ogólnego bezpieczeństwa i konserwacji JDK
  • Nie było ogólnej poprawy wydajności aplikacji
  • Twórcom języka Java trudno było zbudować i utrzymać biblioteki kodu i większe aplikacje, zarówno dla platform Java SE, jak i EE

W tym poście na blogu skategoryzuję funkcje Java 9 w następujący sposób:



  1. Przetwarzaj aktualizacje API w Javie 9
  2. Klient HTTP / 2 w Javie 9
  3. Skrypty Java Shell (Read-Eval-Print-Loop) w Javie 9
  4. Funkcja plików JAR w wielu wersjach w Javie 9
  5. Więcej funkcji aktualizacji współbieżności w Javie 9
  6. Projekt Jigsaw w Javie 9

Co nowego w Javie 9?

Wybrałem kilka nowych funkcji Java 9, o których moim zdaniem warto wiedzieć. Zobaczmy, jakie są te funkcje: -

Przetwarzaj aktualizacje API w Javie 9

Interfejs API Process w Javie był dość prymitywny,ze wsparciem tylko do uruchamiania nowych procesów, przekieruj wyjście procesów i strumienie błędów. W tej wersji aktualizacje interfejsu Process API umożliwiają:

  • Pobieranie identyfikatora PID bieżącego procesu JVM i wszelkich innych procesów uruchomionych przez JVM
  • Wylicz procesy działające w systemie, aby uzyskać informacje, takie jak PID, nazwa i wykorzystanie zasobów
  • Zarządzanie drzewami procesów
  • Zarządzanie podprocesami

Spójrzmy na przykładowy kod, który drukuje bieżący PID, a także bieżące informacje o procesie:



konfigurowanie zaćmienia dla java
public class NewFeatures {public static void main (String [] args) {ProcessHandle currentProcess = ProcessHandle.current () System.out.println ('PID:' + currentProcess.getPid ()) ProcessHandle.Info currentProcessInfo = currentProcess.info () System.out.println ('Info:' + currentProcessInfo)}

Klient HTTP / 2 w Javie 9

Ta funkcja Java 9 ma ulec zmianie w kolejnych wersjach, a nawet może zostać całkowicie usunięta.

Wcześniej Programiści często korzystają z bibliotek innych firm, takich jak Apache HTTP, Jersey i tak dalej. Poza tym interfejs API HTTP języka Java jest starszy od specyfikacji HTTP / 1.1, jest synchroniczny i trudny w utrzymaniu. Te ograniczenia wymagały dodania nowego interfejsu API. Nowy interfejs API klienta HTTP zapewnia:

  • Prosty i zwięzły interfejs API do obsługi większości żądań HTTP
  • Wsparcie dla specyfikacji HTTP / 2
  • Lepsza wydajność
  • Lepsze bezpieczeństwo
  • Jeszcze kilka ulepszeń

Zobaczmy przykładowy kod służący do wysyłania żądania HTTP GET przy użyciu nowych interfejsów API. Poniżej znajduje się definicja modułu zdefiniowana w pliku module-info.java:

moduł newfeatures {wymaga jdk.incubator.httpclient}

Poniższy kod używa interfejsu API klienta HTTP, który jest częścią modułu jdk.incubator.httpclient:

import jdk.incubator.http. * import java.net.URI public class Http2Feature {public static void main (String [] args) throws Exception {HttpClient client = HttpClient.newBuilder (). build () HttpRequest request = HttpRequest .newBuilder ( nowy URI (http://httpbin.org/get)) .GET () .version (HttpClient.Version.HTTP_1_1) .build () HttpResponse.String response = client.send (request, HttpResponse.BodyHandler.asString ()) System.out.println ('Kod stanu:' + response.statusCode ())
System.out.println ('Response Body:' + response.body ())}}}

Skrypty Java Shell (Read-Eval-Print-Loop) w Javie 9

Musiałeś widzieć języki, takie jak Ruby, Scala, Groovy, Clojure i inne, dostarczane z narzędziem, które jest często nazywane REPL ( Pętla odczytu-oceny-drukowania ). To narzędzie REPL jest niezwykle przydatne przy wypróbowywaniu funkcji języka. Na przykład w Scali możemy napisać prosty program Hello World jako scala> println („Hello World”)

Niektóre z zalet JShell REPL są następujące:

  • Doświadczeni programiści mogą szybko prototypować i eksperymentować, zanim zaadoptują je w swojej głównej bazie kodu
  • Programiści Java mogą teraz pochwalić się REPL

Uruchommy polecenie JShell, jak pokazano na poniższej ilustracji:

Przykład JShell Hello World - Java 9 - Edureka

Funkcja plików JAR w wielu wersjach w Javie 9

Obecnie pliki JAR mogą zawierać klasy, które mogą działać tylko w wersji Java, dla której zostały skompilowane. Aby wykorzystać nowe funkcje platformy Java w nowszych wersjach, programiści bibliotek muszą wydać nowszą wersję swojej biblioteki. Wkrótce deweloperzy będą utrzymywać wiele wersji biblioteki, co może być koszmarem. Aby przezwyciężyć to ograniczenie, te funkcje Java 9 plików JAR z wieloma wydaniami umożliwiają programistom tworzenie plików JAR z różnymi wersjami plików klas dla różnych wersji języka Java.Poniższy przykład wyjaśnia to bardziej.

Oto ilustracja aktualnych plików JAR:

korzeń słoika - Klasa - klasa B. - klasa C.

Oto jak wyglądają pliki JAR z wieloma wydaniami:

korzeń słoika - Klasa - klasa B. - klasa C. - META-INF - wersje - 9 - Klasa - 10 - klasa B.

Na powyższej ilustracji pliki JAR obsługują pliki klas dla dwóch wersji języka Java - 9 i 10.

Tak więc, gdy wcześniejszy plik JAR jest wykonywany na Javie 9, do wykonania pobierana jest klasa A.class w folderach wersji - 9.

tablica sortowania c ++

Na platformie, która nie obsługuje wielu wydań plików JAR, klasy w katalogu wersji nigdy nie są używane. Tak więc, jeśli uruchomisz plik JAR z wieloma wydaniami w Javie 8, będzie to równie dobre, jak uruchomienie prostego pliku JAR.

Więcej funkcji aktualizacji współbieżności w Javie 9

W tej aktualizacji nowa klasa, java.util.concurrent.Flow został wprowadzony, który ma zagnieżdżone interfejsy wspierające implementację struktury publikuj-subskrybuj. Struktura publikowania i subskrybowania umożliwia deweloperom tworzenie komponentów, które mogą asynchronicznie wykorzystywać strumień danych na żywo, konfigurując wydawców, którzy generują dane, i subskrybentów, którzy wykorzystują dane za pośrednictwem subskrypcji, która nimi zarządza. Cztery nowe interfejsy są następujące:

  • java.util.concurrent.Flow.Publisher
  • java.util.concurrent.Flow.Subscriber
  • java.util.concurrent.Flow.Subscription
  • java.util.concurrent.Flow.Processor (który działa zarówno jako wydawca, jak i subskrybent).

Projekt Jigsaw w Javie 9

Głównym celem tego projektu jest wprowadzenie pojęcia modułowość wsparcie do tworzenia modułów w Javie 9, a następnie zastosuj to samo do JDK to jest, zmodularyzować JDK .

Niektóre korzyści z modułowość są następujące:

  • Silna hermetyzacja : Moduły mają dostęp tylko do tych części modułu, które zostały udostępnione do użytku. Tak więc klasy publiczne w pakiecie nie są publiczne, chyba że pakiet jest jawnie wyeksportowany w pliku informacyjnym modułu.
  • Wyczyść zależności : Moduły muszą zadeklarować, które inne moduły będą używane za pośrednictwem klauzuli Requirements.
  • Łączenie modułów w celu stworzenia mniejszego środowiska uruchomieniowego, które można łatwo skalować do mniejszych urządzeń komputerowych.
  • Niezawodny : Aplikacje są bardziej niezawodne dzięki eliminacji w czasie wykonywania błędy . Przykład:- musieliście doświadczyć awarii aplikacji w czasie wykonywania z powodu brakujących klas, co spowodowało Klasa nie znaleziono wyjątku .

Są różne JEPs , które są częścią tego projektu, jak następuje:

  • JEP 200 - modułowy JDK : Stosuje system modułów platformy Java do modularyzacji zestawu JDK w zestaw modułów, które można łączyć w czasie kompilacji, kompilacji lub w czasie wykonywania.
  • JEP 201 - modułowy kod źródłowy : To modularyzuje kod źródłowy JDK na moduły i ulepsza narzędzia kompilacji do kompilowania modułów.
  • JEP 220 - modułowe obrazy uruchomieniowe : Zmiana struktury obrazów środowiska wykonawczego JDK i JRE w celu dostosowania do modułów i poprawy wydajności, bezpieczeństwa i łatwości konserwacji.
  • JEP 260 - zawiera większość wewnętrznych API : Umożliwia to bezpośredni dostęp do wielu wewnętrznych interfejsów API lub poprzez odbicie. Dostęp do wewnętrznych interfejsów API, które mają ulec zmianie, jest dość ryzykowny. Aby zapobiec ich użyciu, są one hermetyzowane w moduły, a tylko te wewnętrzne interfejsy API, które są powszechnie używane, są udostępniane, dopóki nie zostanie wstawione odpowiednie API.
  • JEP 261 - system modułowy : Implementuje specyfikację Java systemu modułów, zmieniając język programowania Java, maszynę JVM i inne standardowe interfejsy API
  • JEP 282: jlink, konsolidator Java : Umożliwia to pakowanie modułów i ich zależności w krótsze czasy wykonywania.

A więc chodziło o Javę 9 i nowe funkcje Java 9.

Teraz, gdy zrozumiałeś funkcje Java 9, zapoznaj się z autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie.

sol a pytanie do nas? Wspomnij o tym w sekcji komentarzy na blogu „Java 9”, a my skontaktujemy się z Tobą tak szybko, jak to możliwe.