JDK 10: Co nowego w Javie 10

JDK 10, implementacja Java Standard Edition 10, została wydana 20 marca 2018 r. Kluczowe ulepszenia obejmują lokalne typy zmiennych, a także ulepszenia dotyczące czyszczenia pamięci i kompilacji.

JDK 10 ma być wydaniem krótkoterminowym, a publiczne aktualizacje JDK 10 mają zakończyć się za sześć miesięcy. Nadchodzący JDK 11, który ma się ukazać we wrześniu, będzie wersją Javy z długoterminowym wsparciem (LTS). Wydania LTS są wymagane co trzy lata.

Firma Oracle ustaliła sześciomiesięczny termin publikacji wydań oprogramowania Java. Planowano nazwać tę aktualizację i następców na podstawie roku i miesiąca wydania, przy czym pierwsza wersja miała nosić nazwę Java 18.3. Ale plany te zostały odrzucone po wniesieniu sprzeciwu.

Skąd pobrać Java JDK 10

Możesz pobrać JDK 10 ze strony internetowej Oracle.

Nowe i ulepszone funkcje w JDK 10

Kluczowe funkcje JDK 10 obejmują:

  • Wnioskowanie o typie zmiennej lokalnej, aby ulepszyć język Java w celu rozszerzenia wnioskowania o typie na deklaracje zmiennych lokalnych z inicjatorami.
  • Równoległe pełne wyrzucanie elementów bezużytecznych dla modułu wyrzucania elementów bezużytecznych G1 w celu poprawy opóźnień w najgorszym przypadku.
  • Udostępnianie danych o klasie aplikacji w celu optymalizacji czasu uruchamiania i zajmowanego miejsca. Istniejąca funkcja Class-Data Sharing jest rozszerzona, dzięki czemu klasy aplikacji mogą być umieszczane w udostępnionym archiwum.
  • Eksperymentalny kompilator just-in-time, Graal, może być używany na platformie Linux / x64.
  • Świadomość Dockera. Podczas pracy w systemach Linux wirtualna maszyna języka Java (JVM) będzie wiedzieć, czy działa w kontenerze Docker. Informacje specyficzne dla kontenera - liczba procesorów i całkowita pamięć przydzielona do kontenera - zostaną wyodrębnione przez JVM zamiast wysyłać zapytania do systemu operacyjnego. (Liczba procesorów dostępnych dla procesu Java jest obliczana na podstawie określonych zestawów, udziałów lub przydziałów procesorów).
  • Trzy nowe opcje JVM, aby zapewnić użytkownikom kontenerów Docker większą kontrolę nad pamięcią systemową.
  • Poprawka błędu polegająca na poprawieniu mechanizmu dołączania podczas próby dołączenia z procesu hosta do procesu Java, który znajduje się w kontenerze Docker.
  • Krótsze czasy uruchamiania narzędzia jShell REPL, szczególnie gdy używany jest plik startowy z wieloma fragmentami.
  • Nowe interfejsy API, aby lepiej umożliwić tworzenie niemodyfikowalnych kolekcji. Metody copyOf, Set.copyOfi Map.copyOftworzą nowe wystąpienia kolekcji na podstawie istniejących wystąpień. Nowe metody toUnmodifiableList, toUnmodifiableSeti toUnmodifiableMapdodano do Collectorsklasy w pakietu strumienia, dzięki czemu elementy Stream być pobierane do gromadzenia się niezmienne.
  • Wnioskowanie o typie zmiennej lokalnej w celu rozszerzenia języka w celu rozszerzenia wnioskowania o typie na zmienne lokalne. Celem jest ograniczenie „ceremonii” związanej z kodowaniem przy jednoczesnym zachowaniu zobowiązania do statycznego bezpieczeństwa typu.
  • Czysty interfejs modułu odśmiecania pamięci, aby poprawić izolację kodu źródłowego różnych modułów odśmiecania pamięci. Cele tego wysiłku obejmują lepszą modułowość dla wewnętrznego kodu czyszczenia pamięci w maszynie wirtualnej HotSpot i ułatwienie dodawania nowego garbage collectora do HotSpot.
  • Równoległe pełne wyrzucanie elementów bezużytecznych dla modułu wyrzucania elementów bezużytecznych G1. Celem jest poprawienie opóźnień w najgorszym przypadku poprzez wdrożenie równoległości.
  • Umożliwienie HotSpot alokacji sterty obiektów na alternatywnym urządzeniu pamięci, takim jak moduł pamięci NVDIMM, określonym przez użytkownika. Ta funkcja przewiduje, że przyszłe systemy mogą mieć heterogeniczną architekturę pamięci.
  • Włączenie kompilatora just-in-time opartego na Javie Grall do eksperymentalnego wykorzystania na platformie Linux / x64.
  • Konsolidacja repozytoriów lasu JDK w jedno repozytorium w celu usprawnienia rozwoju. Baza kodu do tej pory została podzielona na wiele repozytoriów, co może powodować problemy z zarządzaniem kodem źródłowym.
  • Udostępnianie danych klas aplikacji w celu zmniejszenia obciążenia przez udostępnianie wspólnych metadanych klas między procesami. Skraca się również czas uruchamiania.
  • Uzgadnianie lokalne wątku, służące do wykonywania wywołań zwrotnych w wątkach bez wykonywania globalnego punktu bezpiecznego maszyny wirtualnej. Pojedyncze wątki można zatrzymać zamiast wszystkich wątków lub żadnych wątków.
  • Dostarczenie domyślnego zestawu certyfikatów głównego urzędu certyfikacji w JDK. Celem jest utworzenie certyfikatów głównych typu open source w programie Oracle Java SE Root CA, aby kompilacje OpenJDK były bardziej atrakcyjne dla programistów.

Długoterminowa mapa drogowa Java

Oto, co powiedzieli Oracle, rozważane w następnej i późniejszych wersjach Java SE:

  • Projekt Amber, który był inkubatorem mniejszych, zorientowanych na produktywność funkcji językowych, które obejmują wnioskowanie o typie zmiennych lokalnych, w celu zmniejszenia ceremonii związanej z pisaniem kodu Java; ulepszone wyliczenia, aby poprawić ekspresję konstrukcji wyliczenia, zezwalając na zmienne typu w wyliczeniach i przeprowadzając ostrzejsze sprawdzanie typów stałych wyliczeniowych; i resztki lambda, aby zwiększyć użyteczność lambda i odwołań do metod.
  • Projekt Panama w celu połączenia maszyny JVM i kodu natywnego, obejmującego natywne wywoływanie funkcji z JVM i natywny dostęp do danych z JVM.
  • Valhalla, projekt inkubatora dla zaawansowanych maszyn wirtualnych Java i kandydatów na funkcje językowe, w tym typy wartości i specjalizację ogólną.
  • Project Loom, aby zmniejszyć złożoność pisania współbieżnych aplikacji. Plan wymaga dodania alternatywnych implementacji wątków w trybie użytkownika, ograniczonych kontynuacji i innych konstrukcji obejmujących manipulację stosem wywołań. Głównym celem tej propozycji jest zaoferowanie alternatywnej implementacji wątków, zarządzanej przez planiatory napisane w Javie. Model programowania Java zwykłych wątków Java zostałby zachowany, przy jednoczesnej poprawie wydajności i zmniejszeniu zajmowanego miejsca.

Dzięki nowemu sześciomiesięcznemu harmonogramowi wydań funkcje, które pomijają jedną wersję, mogą być opóźnione nawet o sześć miesięcy, gdy pojawi się kolejna wersja. Poza tym, co zostało ogłoszone dla JDK 10, Oracle nie zobowiązało się do tego, kiedy którakolwiek z nowych proponowanych funkcji zostanie faktycznie udostępniona w Javie.