18 marca 2014 r. firma Oracle wypuściła nową wersję języka Java jako Java 8. Było to rewolucyjne wydanie platformy Java do tworzenia oprogramowania. Zawiera różne aktualizacje programowania Java, JVM, narzędzi i bibliotek.
Udoskonalenia języka programowania Java 8
Java 8 udostępnia następujące funkcje programowania w języku Java:
- wyrażenia lambda,
- odniesienia do metod,
- Interfejsy funkcjonalne,
- Stream API,
- Metody domyślne,
- Dekodowanie kodowania Base64,
- Metody statyczne w interfejsie,
- Klasa opcjonalna,
- klasa kolekcjonerska,
- metoda ForEach(),
- Silnik JavaScript Rhino,
- równoległe sortowanie tablic,
- Wpisywanie i powtarzanie adnotacji,
- Udoskonalenia we/wy,
- Ulepszenia współbieżności,
- Ulepszenia JDBC itp.
Wyrażenia lambda
Wyrażenie lambda pomaga nam pisać nasz kod w funkcjonalnym stylu. Zapewnia jasny i zwięzły sposób implementacji interfejsu SAM (metoda pojedynczej abstrakcyjnej) za pomocą wyrażenia. Jest bardzo przydatny w bibliotece kolekcji, w której pomaga iterować, filtrować i wyodrębniać dane.
Więcej informacji i przykładów: Kliknij tutaj
Odniesienia do metod
Java 8 Odwołanie do metody służy do odwoływania się do metody interfejsu funkcjonalnego. Jest to zwarta i łatwa forma wyrażenia lambda. Za każdym razem, gdy używasz wyrażenia lambda do odwoływania się do metody, możesz zastąpić to wyrażenie lambda odwołaniem do metody.
Więcej informacji i przykładów: Kliknij tutaj
Funkcjonalny interfejs
Interfejs zawierający tylko jedną metodę abstrakcyjną nazywany jest interfejsem funkcjonalnym. Może mieć dowolną liczbę metod domyślnych i statycznych. Może także deklarować metody klasy obiektu.
Interfejsy funkcjonalne są również znane jako interfejsy pojedynczej metody abstrakcyjnej (interfejsy SAM).
Więcej informacji i przykładów: Kliknij tutaj
Opcjonalny
Java wprowadziła nową klasę Opcjonalna w Javie 8. Jest to publiczna klasa końcowa, która służy do radzenia sobie z wyjątkiem NullPointerException w aplikacji Java. Musimy importować Java.util pakiet, aby używać tej klasy. Dostarcza metod sprawdzających obecność wartości dla danej zmiennej.
Więcej informacji i przykładów: Kliknij tutaj
dla każdego
Java udostępnia nową metodę forEach() umożliwiającą iterację elementów. Jest zdefiniowany w interfejsach Iterable i Stream.
Jest to metoda domyślna zdefiniowana w interfejsie Iterable. Klasy kolekcji rozszerzające interfejs Iterable mogą używać metody forEach() do iteracji elementów.
Metoda ta przyjmuje pojedynczy parametr będący interfejsem funkcjonalnym. Możesz więc przekazać wyrażenie lambda jako argument.
Więcej informacji i przykładów: Kliknij tutaj
Interfejs API daty/godziny
Java wprowadziła nowy interfejs API daty i godziny od wersji Java 8. Pakiet java.time zawiera klasy daty i godziny Java 8.
Więcej informacji i przykładów: Kliknij tutaj
Metody domyślne
Java udostępnia funkcję tworzenia domyślnych metod w interfejsie. Metody zdefiniowane wewnątrz interfejsu i oznaczone słowem kluczowym default nazywane są metodami domyślnymi. Metody te nie są metodami abstrakcyjnymi i mogą mieć treść metody.
Więcej informacji i przykładów: kliknij tutaj
Silnik JavaScript Rhino
Nashorn to silnik JavaScript. Służy do dynamicznego wykonywania kodu JavaScript w JVM (Java Virtual Machine). Java udostępnia narzędzie wiersza poleceń itp który służy do wykonywania kodu JavaScript.
Kod JavaScript możesz wykonać na dwa sposoby:
- Korzystanie z narzędzia wiersza poleceń jjs i
- Poprzez osadzenie w kodzie źródłowym Java.
Więcej informacji i przykładów: kliknij tutaj
StringJoiner
Java dodała nową końcową klasę StringJoiner w pakiecie java.util. Służy do konstruowania ciągu znaków oddzielonych ogranicznikiem. Teraz możesz utworzyć ciąg znaków, przekazując ograniczniki, takie jak przecinek (,), łącznik (-) itp.
cechy Javy
Więcej informacji i przykładów: kliknij tutaj
Kolekcjonerzy
Collectors to ostatnia klasa, która rozszerza klasę Object. Zapewnia operacje redukcyjne, takie jak gromadzenie elementów w zbiory, sumowanie elementów według różnych kryteriów itp.
Więcej informacji i przykładów: Kliknij tutaj
Strumieniowe API
Pakiet Java 8 java.util.stream składa się z klas, interfejsów i wyliczenia umożliwiających operacje na elementach w stylu funkcjonalnym. Wykonuje leniwe obliczenia. Dlatego wykonuje się tylko wtedy, gdy tego wymaga.
Więcej informacji i przykładów: Kliknij tutaj
Filtr strumieniowy
Strumień Java udostępnia metodę filter() służącą do filtrowania elementów strumienia na podstawie podanego predykatu. Załóżmy, że chcesz uzyskać tylko parzyste elementy swojej listy, możesz to łatwo zrobić za pomocą metody filter().
Ta metoda przyjmuje predykat jako argument i zwraca strumień wynikowych elementów.
Więcej informacji i przykładów: Kliknij tutaj
Kodowanie i dekodowanie Java Base64
Java udostępnia klasę Base64 do obsługi szyfrowania i deszyfrowania. Aby skorzystać z jej metod, musisz zaimportować klasę java.util.Base64 do pliku źródłowego.
Ta klasa zapewnia trzy różne kodery i dekodery do szyfrowania informacji na każdym poziomie.
Więcej informacji i przykładów: Kliknij tutaj
Równoległe sortowanie tablic w Javie
Java udostępnia nową, dodatkową funkcję w klasie Arrays, która służy do równoległego sortowania elementów tablicy. Do klasy java.util.Arrays dodano metodę równoległego sortowania(), która korzysta ze wspólnej puli równoległości JSR 166 Fork/Join w celu sortowania tablic. Jest to metoda przeciążona.
Więcej informacji i przykładów: kliknij tutaj
Ulepszenia zabezpieczeń Java 8
1) Dostawca Java Secure Socket Extension (JSSE) domyślnie włącza protokoły Transport Layer Security (TLS) 1.1 i TLS 1.2 po stronie klienta.
2) Dodano ulepszoną metodę AccessController.doPrivileged, która umożliwia kodowi potwierdzenie podzbioru jego uprawnień, bez uniemożliwiania pełnego przejścia stosu w celu sprawdzenia innych uprawnień.
3) Do dostawcy SunJCE dodano algorytmy Advanced Encryption Standard (AES) i Password-Based Encryption (PBE), takie jak PBEWithSHA256AndAES_128 i PBEWithSHA512AndAES_256.
4) Rozszerzenie Java Secure Socket Extension (SunJSSE) domyślnie włączyło rozszerzenie Server Name Indication (SNI) dla aplikacji klienckich w JDK 7, a JDK 8 obsługuje rozszerzenie SNI dla aplikacji serwerowych. Rozszerzenie SNI to funkcja rozszerzająca protokoły SSL/TLS o wskazanie nazwy serwera, z którym klient próbuje się połączyć podczas uzgadniania.
5) SunJSSE zostało ulepszone w celu obsługi algorytmów uwierzytelnionego szyfrowania z powiązanymi danymi (AEAD). Dostawca rozszerzenia Java Cryptography Extension (SunJCE) został ulepszony w celu obsługi implementacji szyfrów AES/GCM/NoPadding, a także parametrów algorytmu Galois/Counter Mode (GCM).
6) Do narzędzia keytool dodano nową opcję -importpassword. Służy do akceptowania hasła i bezpiecznego przechowywania go jako tajnego klucza. Dodano klasy takie jak java.security.DomainLoadStoreParameter ijava.security.PKCS12Attribute w celu obsługi typu magazynu kluczy DKS.
7) W JDK 8 algorytmy kryptograficzne zostały ulepszone o wariant SHA-224 rodziny implementacji skrótu komunikatów SHA-2.
8) Ulepszona obsługa kryptografii NSA Suite B, która obejmuje:
- Rejestracja OID dla algorytmów kryptograficznych NSA Suite B
- Obsługa generowania 2048-bitowych par kluczy DSA i dodatkowych algorytmów podpisu dla 2048-bitowych kluczy DSA, takich jak SHA224withDSA i SHA256withDSA.
- Zniesienie ograniczenia rozmiaru klucza z 1024 na 2048 dla algorytmu Diffiego-Hellmana (DH).
9) Klasa SecureRandom umożliwia generowanie silnych kryptograficznie liczb losowych, które są wykorzystywane do kluczy prywatnych lub publicznych, szyfrów i podpisanych wiadomości. Metoda getInstanceStrong() została wprowadzona w JDK 8, która zwraca instancję najsilniejszego SecureRandom. Należy go używać, gdy trzeba utworzyć klucz prywatny i publiczny RSA. SecureRandom zawiera następujące inne zmiany:
- Wprowadzono dwie nowe implementacje dla platform UNIX, które zapewniają zachowanie blokujące i nieblokujące.
10) Dodano nową klasę PKIXRevocationChecker, która sprawdza status unieważnienia certyfikatów za pomocą algorytmu PKIX. Obsługuje sprawdzanie najlepszych starań, sprawdzanie certyfikatów jednostki końcowej i opcje specyficzne dla mechanizmu.
11) Standardy kryptografii klucza publicznego 11 (PKCS) zostały rozszerzone o obsługę wersji 64-bitowej dla systemu Windows.
12) Do protokołu Kerberos 5 dodano dwa nowe typy rcache. Typ none oznacza brak rcache w ogóle, a typ dfl oznacza rcache oparte na plikach w stylu DFL. Obsługiwany jest także podklucz żądany przez akceptanta. Są one konfigurowane przy użyciu właściwości systemowych sun.security.krb5.rcache i sun.security.krb5.acceptor.subkey.
13) W JDK 8, przejście protokołu Kerberos 5 i ograniczone delegowanie są obsługiwane w tej samej dziedzinie.
14) Java 8 domyślnie wyłącza słabe szyfrowanie. Typy szyfrowania Kerberos 5 związane z DES nie są domyślnie obsługiwane. Te typy szyfrowania można włączyć, dodając zezwolenie_weak_crypto=true w pliku krb5.conf.
15) Możesz ustawić nazwę serwera na null, aby oznaczyć serwer niezwiązany. Oznacza to, że klient może zażądać usługi przy użyciu dowolnej nazwy serwera. Po ustanowieniu kontekstu serwer może pobrać nazwę jako wynegocjowaną właściwość z nazwą klucza SASL.BOUND_SERVER_NAME.
16) Most Java Native Interface (JNI) do natywnej usługi Java Generic Security Service (JGSS) jest teraz obsługiwany w systemie Mac OS X. Możesz ustawić właściwość systemową sun.security.jgss.native na true, aby ją włączyć.
17) Zdefiniowano nową właściwość systemową jdk.tls.ephemeralDHKeySize w celu dostosowania rozmiarów kluczy efemerycznych DH. Minimalny akceptowalny rozmiar klucza DH to 1024 bity, z wyjątkiem eksportowanych zestawów szyfrów lub trybu starszego typu (jdk.tls.ephemeralDHKeySize=legacy).
18) Dostawca rozszerzenia Java Secure Socket Extension (JSSE) domyślnie honoruje preferencje klienta dotyczące zestawu szyfrów. Jednak zachowanie można zmienić, aby szanować preferencje zestawu szyfrów serwera, wywołując funkcję SSLParameters.setUseCipherSuitesOrder(true) na serwerze.
Ulepszenia narzędzi Java 8
1) Wprowadzono polecenie jjs, które wywołuje silnik Nashorn albo w interaktywnym trybie powłoki, albo w celu interpretacji plików skryptów.
2) Komenda Java może uruchamiać aplikacje JavaFX, pod warunkiem, że aplikacja JavaFX jest poprawnie spakowana.
3) Strona podręcznika poleceń Java (zarówno nroff, jak i HTML) została całkowicie przerobiona. Opcje zaawansowane są teraz podzielone na środowisko wykonawcze, kompilator, zbieranie śmieci i łatwość serwisowania, w zależności od obszaru, którego dotyczą. Opisano teraz kilka brakujących wcześniej opcji. Istnieje również sekcja dotycząca opcji, które zostały przestarzałe lub usunięte od czasu poprzedniej wersji.
4) Nowe narzędzie wiersza poleceń jdeps umożliwia programistom analizowanie plików klas w celu określenia zależności na poziomie pakietu lub klasy.
5) Można uzyskać zdalny dostęp do poleceń diagnostycznych, które wcześniej były dostępne tylko lokalnie za pośrednictwem narzędzia jcmd. Zdalny dostęp jest zapewniany przy użyciu rozszerzeń Java Management Extensions (JMX), więc polecenia diagnostyczne są udostępniane komponentowi MBean platformy zarejestrowanemu na serwerze MBean platformy. Komponent MBean to interfejs com.sun.management.DiagnosticCommandMBean.
6) W narzędziu jarsigner dostępna jest nowa opcja -tsapolicyid, która umożliwia zażądanie podpisanego znacznika czasu od urzędu znacznika czasu i dołączenie go do podpisanego pliku JAR.
7) Dodano nową metodę java.lang.reflect.Executable.getParameters, która umożliwia dostęp do nazw parametrów formalnych dowolnej metody lub konstruktora. Jednak pliki .class domyślnie nie przechowują formalnych nazw parametrów. Aby przechowywać formalne nazwy parametrów w konkretnym pliku .class i w ten sposób umożliwić API Reflection pobieranie formalnych nazw parametrów, skompiluj plik źródłowy z opcją -parameters kompilatora javac.
8) Reguły typów dla porównań binarnych w specyfikacji języka Java (JLS), sekcja 15.21, będą teraz poprawnie egzekwowane przez javac.
9) W tej wersji narzędzie apt i powiązane z nim API zawarte w pakiecie com.sun.mirror zostały usunięte.
Udoskonalenia Javadoc
W Java SE 8 do narzędzia Javadoc dodano następujące nowe interfejsy API.
- Nowe API DocTree wprowadza skaner, który umożliwia przeglądanie kodu źródłowego reprezentowanego przez abstrakcyjne drzewo składni. Rozszerza to interfejs API drzewa kompilatora, aby zapewnić zorganizowany dostęp do treści komentarzy javadoc.
- Pakiet javax.tools zawiera klasy i interfejsy umożliwiające wywołanie narzędzia Javadoc bezpośrednio z aplikacji Java, bez konieczności wykonywania nowego procesu.
- Sekcja „Podsumowanie metody” wygenerowanej dokumentacji klasy lub interfejsu została przebudowana. Opisy metod w tej sekcji są pogrupowane według typu. Domyślnie wymienione są wszystkie metody. Możesz kliknąć kartę, aby wyświetlić metody określonego typu (statyczne, instancyjne, abstrakcyjne, konkretne lub przestarzałe, jeśli istnieją w klasie lub interfejsie).
- Narzędzie javadoc obsługuje teraz sprawdzanie treści komentarzy javadoc pod kątem problemów, które mogą prowadzić do różnych problemów, takich jak nieprawidłowy kod HTML lub problemy z dostępnością, w plikach generowanych przez javadoc. Ta funkcja jest domyślnie włączona i można nią także sterować za pomocą nowej opcji -Xdoclint.
Udoskonalenia Pack200
Format pliku klasy Java został zaktualizowany ze względu na JSR 292, który obsługuje języki o typie dynamicznym na platformie Java.
Silnik Pack200 został zaktualizowany, aby zapewnić efektywną kompresję plików klasy Java SE 8. Teraz rozpoznaje stałe wpisy w puli i nowe kody bajtowe wprowadzone przez JSR 292. W rezultacie skompresowane pliki utworzone za pomocą tej wersji narzędzia pack200 nie będą kompatybilne ze starszymi wersjami narzędzia unpack200.
Ulepszenia we/wy Java 8
W Javie 8 wprowadzono kilka ulepszeń implementacji java.nio.charset.Charset i rozszerzonych implementacji zestawu znaków. Obejmuje to:
- Nowy SelectorProvider, który może poprawić wydajność lub skalowalność serwera. Dostawca /dev/poll SelectorProvider nadal jest domyślny. Aby skorzystać z mechanizmu portu zdarzeń Solaris, należy uruchomić z właściwością systemową java.nio.channels.spi.Selector ustawioną na wartość sun.nio.ch.EventPortSelectorProvider.
- Zmniejszono rozmiar pliku /jre/lib/charsets.jar.
- Poprawiono wydajność konstruktora java.lang.String(byte[], ∗) i metody java.lang.String.getBytes().
Ulepszenia sieciowe Java 8
1) Dodano nową klasę java.net.URLPermission. Reprezentuje pozwolenie na dostęp do zasobu zdefiniowanego przez dany adres URL.
2) Dodano pakiet jdk.net, który zawiera opcje gniazd specyficzne dla platformy oraz mechanizm ustawiania tych opcji dla wszystkich standardowych typów gniazd. Opcje gniazd są zdefiniowane w jdk.net.ExtendedSocketOptions.
3) W klasie HttpURLConnection, jeśli jest zainstalowany menedżer bezpieczeństwa i jeśli zostanie wywołana metoda, która skutkuje próbą otwarcia połączenia, obiekt wywołujący musi posiadać uprawnienie „connect”SocketPermission do kombinacji host/port docelowego adresu URL lub URLPermission zezwalający na to żądanie.
Jeśli włączone jest automatyczne przekierowanie, a to żądanie jest przekierowane do innego miejsca docelowego, osoba wywołująca musi również mieć uprawnienia do połączenia z przekierowanym hostem/adresem URL.
znak Java na int
Ulepszenia współbieżności Java 8
Pakiet java.util.concurrent dodał dwa nowe interfejsy i cztery nowe klasy.
Interfejsy Java.util.concurrent
Interfejs | Opis |
---|---|
publiczny interfejs statyczny CompletableFuture.AsynchronousCompletionTask | Jest to interfejs znaczników używany do identyfikacji zadań asynchronicznych generowanych metodami asynchronicznymi. Może być przydatny do monitorowania, debugowania i śledzenia działań asynchronicznych. |
interfejs publiczny CompletionStage | Tworzy etap możliwie asynchronicznego obliczenia, który wykonuje akcję lub oblicza wartość po zakończeniu innego etapu CompletionStage. |
Klasy Java.util.concurrent
Klasa | Opis |
---|---|
klasa publiczna CompletableFuture rozszerza Obiekt implementuje Future, CompletionStage | Jest to przyszłość, która może zostać jawnie ukończona i może być używana jako CompletionStage, obsługująca zależne funkcje i akcje uruchamiane po jej ukończeniu. |
publiczna klasa statyczna ConcurrentHashMap.KeySetView rozszerza Obiekt implementuje zestaw, który można serializować | Jest to widok ConcurrentHashMap jako zestawu kluczy, w którym można opcjonalnie włączyć dodatki poprzez mapowanie na wspólną wartość. |
publiczna klasa abstrakcyjna CountedCompleter rozszerza ForkJoinTask | ForkJoinTask z akcją zakończenia wykonywaną po uruchomieniu i nie ma żadnych pozostałych oczekujących akcji. |
klasa publiczna CompletionException rozszerza wyjątek RuntimeException | Zgłasza wyjątek, gdy w trakcie wykonywania wyniku lub zadania napotkany zostanie błąd lub inny wyjątek. |
Nowe metody w klasie java.util.concurrent.ConcurrentHashMap
Klasa ConcurrentHashMap w swojej najnowszej wersji wprowadza kilka nowych metod. Zawiera różne metody forEach (forEach, forEachKey, forEachValue i forEachEntry), metody wyszukiwania (search, searchKeys, searchValues i searchEntries) oraz dużą liczbę metod redukcji (reduce, redukcjaToDouble, redukcjaToLong itp.). Dodano także inne różne metody (mappingCount i newKeySet).
Nowe klasy w java.util.concurrent.atomic
Najnowsza wersja wprowadza skalowalną, aktualizowaną i zmienną obsługę poprzez niewielki zestaw nowych klas DoubleAccumulator, DoubleAdder, LongAccumulator iLongAdder. Wewnętrznie wykorzystuje techniki redukcji rywalizacji, które zapewniają ogromną poprawę przepustowości w porównaniu ze zmiennymi Atomic.
Klasa | Opis |
---|---|
klasa publiczna DoubleAccumulator rozszerza Liczba implementuje możliwość serializacji | Jest używany w przypadku jednej lub większej liczby zmiennych, które łącznie utrzymują bieżącą podwójną wartość aktualizowaną za pomocą dostarczonej funkcji. |
klasa publiczna DoubleAdder rozszerza Liczba implementuje możliwość serializacji | Stosuje się go w przypadku jednej lub większej liczby zmiennych, które razem utrzymują początkowo zerową sumę podwójną. |
klasa publiczna LongAccumulator rozszerza Liczba implementuje możliwość serializacji | Jest używany w przypadku jednej lub większej liczby zmiennych, które razem utrzymują długotrwałą wartość aktualizowaną za pomocą dostarczonej funkcji. |
klasa publiczna LongAdder rozszerza Liczba implementuje możliwość serializacji | Stosuje się go w przypadku jednej lub większej liczby zmiennych, które razem utrzymują początkowo zerową sumę. |
Nowe metody w klasie java.util.concurrent.ForkJoinPool
Do tej klasy dodano dwie nowe metody getCommonPoolParallelism() i commonPool(), które zwracają docelowy poziom równoległości odpowiednio wspólnej puli lub instancji wspólnej puli.
metoda | Opis |
---|---|
publiczny statyczny ForkJoinPool commonPool() | Zwraca instancję wspólnej puli. |
Publiczny statyczny int getCommonPoolParallelism() | Zwraca docelowy poziom równoległości wspólnej puli. |
Nowa klasa java.util.concurrent.locks.StampedLock
Dodano nową klasę StampedLock, która służy do dodawania blokady opartej na możliwościach z trzema trybami kontrolowania dostępu do odczytu/zapisu (zapis, odczyt i odczyt optymistyczny). Ta klasa obsługuje również metody, które warunkowo zapewniają konwersje w trzech trybach.
Klasa | Opis |
---|---|
klasa publiczna StampedLock rozszerza Obiekt implementuje możliwość serializacji | Ta klasa reprezentuje blokadę opartą na możliwościach z trzema trybami kontrolowania dostępu do odczytu/zapisu. |
Udoskonalenia interfejsu Java API do przetwarzania XML (JAXP) 1.6
W wersji Java 8 dodano interfejs Java API do przetwarzania XML (JAXP) 1.6. Wymaga użycia narzędzia ładującego dostawcę usług zdefiniowanego przez java.util.ServiceLoader w celu ładowania usług z plików konfiguracyjnych usług.
Powodem tego jest umożliwienie przyszłej modularyzacji platformy Java SE, w której dostawcy usług mogą być wdrażani za pomocą innych środków niż pliki JAR i być może bez plików konfiguracyjnych usług.
Udoskonalenia maszyny wirtualnej Java
Weryfikacja instrukcji invokespecial została zaostrzona tak, że można wywołać tylko metodę inicjalizacji instancji w bieżącej klasie lub jej bezpośredniej superklasie.
Java Mission Control 5.3 jest zawarta w Javie 8
Java Mission Control (JMC) to zaawansowany zestaw narzędzi, który umożliwia wydajną i szczegółową analizę danych oraz zapewnia zaawansowane, dyskretne monitorowanie i zarządzanie Java. JMC udostępnia sekcje dotyczące typowych obszarów analizy, takich jak wydajność kodu, pamięć i opóźnienia.
jak otworzyć plik w Javie
Pakiety językowe Babel w języku japońskim i chińskim uproszczonym są teraz domyślnie zawarte w module Java Mission Control zawartym w pakiecie JDK 8.
Ulepszenia internacjonalizacji Java 8
1) Ulepszenia Unicode
JDK 8 zawiera obsługę Unicode 6.2.0. Zawiera następujące funkcje.
- 733 nowe znaki, w tym znak liry tureckiej.
- 7 nowych skryptów:
- Hieroglify meroickie
- Kursywa meroicka
- Sorę Sompeng
- Czakma
- Szarada
- Takri
- Miao
- 11 nowych bloków: w tym 7 bloków dla nowych skryptów wymienionych powyżej i 4 bloki dla następujących istniejących skryptów:
- Arabski rozszerzony-A
- Dodatek Sundajski
- Spotkanie z Meek Extensions
- Arabskie matematyczne symbole alfabetyczne
Przyjęcie danych CLDR Unicode i właściwości systemowej java.locale.providers
Konsorcjum Unicode uruchomiło projekt Common Locale Data Repository (CLDR), aby „obsłużyć języki świata za pomocą największego i najbardziej rozbudowanego standardowego repozytorium danych lokalnych”. CLDR staje się de facto standardem dla danych lokalnych. Dane regionalne CLDR oparte na formacie XML zostały włączone do wydania JDK 8, jednak domyślnie są wyłączone.
Istnieją cztery różne źródła danych regionalnych:
- CLDR reprezentuje dane regionalne dostarczone przez projekt Unicode CLDR.
- HOST reprezentuje dostosowanie ustawień podstawowego systemu operacyjnego przez bieżącego użytkownika. Działa tylko z domyślnymi ustawieniami regionalnymi użytkownika, a konfigurowalne ustawienia mogą się różnić w zależności od systemu operacyjnego, ale obsługiwane są przede wszystkim formaty daty, godziny, liczb i waluty.
- SPI reprezentuje usługi wrażliwe na ustawienia regionalne zaimplementowane w zainstalowanych dostawcach SPI.
- JRE reprezentuje dane regionalne, które są kompatybilne z wcześniejszymi wydaniami JRE.
Aby wybrać żądane źródło danych ustawień regionalnych, użyj właściwości systemowej java.locale.providers. wymieniając źródła danych w preferowanej kolejności. Na przykład: java.locale.providers=HOST,SPI,CLDR,JRE Domyślne zachowanie jest równoważne następującemu ustawieniu: java.locale.providers=JRE,SPI
Java 8 Nowe interfejsy API kalendarza i ustawień regionalnych
JDK 8 zawiera dwie nowe klasy, kilka nowych metod i nową wartość zwracaną dla istniejącej metody statycznej.
Do pakietu java.util.spi dodano dwie nowe klasy abstrakcyjne dla dostawców usług.
Klasa | Opis |
---|---|
publiczna klasa abstrakcyjna CalendarDataProvider rozszerza LocaleServiceProvider | Jest to klasa abstrakcyjna dla dostawców usług udostępniających parametry Kalendarza zależne od ustawień regionalnych. |
publiczna klasa abstrakcyjna CalendarNameProvider rozszerza LocaleServiceProvider | Jest to klasa abstrakcyjna dla dostawców usług, którzy udostępniają zlokalizowane reprezentacje łańcuchowe (nazwy wyświetlane) wartości pól kalendarza. |
Metoda statyczna jest teraz w stanie rozpoznać Locale.UNICODE_LOCALE_EXTENSION dla systemu numeracji.
metoda | Opis |
---|---|
public static final DecimalFormatSymbols getInstance (ustawienia regionalne) | Służy do pobrania instancji DecimalFormatSymbols dla określonych ustawień regionalnych. Ta metoda zapewnia dostęp do instancji DecimalFormatSymbols dla ustawień narodowych obsługiwanych przez samo środowisko wykonawcze Java, a także dla tych obsługiwanych przez zainstalowane implementacje DecimalFormatSymbolsProvider. Zgłasza wyjątek NullPointerException, jeśli ustawienia regionalne mają wartość null. |
Dodano nowe metody w API kalendarza:
metoda | Opis |
---|---|
publiczna wartość logiczna isSupportedLocale (ustawienia regionalne) | Zwraca wartość true, jeśli dane ustawienia regionalne są obsługiwane przez tego dostawcę usług ustawień regionalnych. Podane ustawienia regionalne mogą zawierać rozszerzenia, które należy wziąć pod uwagę przy określaniu wsparcia. Jest ona zdefiniowana w klasie java.util.spi.LocaleServiceProvider |
publiczny ciąg getCalendarType() | Zwraca typ kalendarza tego kalendarza. Typy kalendarzy są zdefiniowane w specyfikacji języka LDML (Unicode Locale Data Markup Language). Jest zdefiniowany w klasie java.util.Calendar. |
Do metod Calendar.getDisplayName i Calendar.getDisplayNames dodano nowe specyfikatory stylu w celu określenia formatu nazwy kalendarza.
Specyficzny | Opis |
---|---|
publiczny statyczny końcowy int SHORT_FORMAT | Jest to specyfikator stylu dla getDisplayName i getDisplayNames wskazujący krótką nazwę używaną do formatowania. |
publiczny statyczny końcowy int LONG_FORMAT | Jest to specyfikator stylu dla getDisplayName i getDisplayNames wskazujący długą nazwę używaną do formatowania. |
publiczny statyczny końcowy int SHORT_STANDALONE | Jest to specyfikator stylu dla getDisplayName i getDisplayNames wskazujący krótką nazwę używaną niezależnie, na przykład skrót miesiąca jako nagłówki kalendarza. |
publiczny statyczny końcowy int LONG_STANDALONE | Jest to specyfikator stylu dla getDisplayName i getDisplayNames wskazujący długą nazwę używaną niezależnie, np. nazwę miesiąca jako nagłówki kalendarza. |
Dwie nowe metody Locale do obsługi (opcjonalnych) rozszerzeń ustawień regionalnych.
metoda | Opis |
---|---|
publiczna wartość logiczna hasExtensions() | Zwraca wartość true, jeśli te ustawienia regionalne mają jakieś rozszerzenia. |
publiczne ustawienia regionalne stripExtensions() | Zwraca kopię ustawień regionalnych bez rozszerzeń. Jeśli te ustawienia regionalne nie mają rozszerzeń, zwracane są same ustawienia regionalne. |
Dwie nowe metody Locale.filter zwracają listę instancji Locale spełniających określone kryteria, zgodnie z definicją w RFC 4647:
metoda | Opis |
---|---|
publiczny filtr statyczny listy (lista priorytetów listy, ustawienia regionalne kolekcji) | Zwraca listę pasujących instancji ustawień regionalnych przy użyciu mechanizmu filtrowania zdefiniowanego w RFC 4647. Jest to odpowiednik filter(List, Collection, FilteringMode), gdy tryb to Locale.FilteringMode.AUTOSELECT_FILTERING. |
publiczny filtr statyczny listy (lista priorytetów listy, ustawienia regionalne kolekcji, tryb Locale.FilteringMode) | Zwraca listę pasujących instancji Locale przy użyciu mechanizmu filtrowania zdefiniowanego w RFC 4647. |
Dwie nowe metody Locale.filterTags zwracają listę tagów językowych spełniających określone kryteria zgodnie z definicją w dokumencie RFC 4647.
metoda | Opis |
---|---|
public static Lista filterTags (Lista priorytetów listy, Tagi kolekcji) | Zwraca listę pasujących tagów języków przy użyciu podstawowego mechanizmu filtrowania zdefiniowanego w RFC 4647. Jest to odpowiednik filterTags(List, Collection, FilteringMode), gdy tryb to Locale.FilteringMode.AUTOSELECT_FILTERING. |
public static Lista filterTags (lista priorytetów listy, znaczniki kolekcji, tryb Locale.FilteringMode) | Zwraca listę pasujących tagów języków przy użyciu podstawowego mechanizmu filtrowania zdefiniowanego w RFC 4647. |
Dwie nowe metody wyszukiwania zwracają najlepiej pasujące znaczniki regionalne lub językowe, korzystając z mechanizmu wyszukiwania zdefiniowanego w dokumencie RFC 4647.
metoda | Opis |
---|---|
publiczne statyczne wyszukiwanie ustawień regionalnych (lista priorytetów listy, ustawienia regionalne kolekcji) | Zwraca instancję ustawień regionalnych dla najlepiej pasującego znacznika języka, korzystając z mechanizmu wyszukiwania zdefiniowanego w RFC 4647. |
Publiczny statyczny ciąg znaków lookupTag (Lista priorytetów listy, Tagi kolekcji) | Zwraca najlepiej pasujący znacznik językowy, korzystając z mechanizmu wyszukiwania zdefiniowanego w RFC 4647. |
Inne ulepszenia wersji Java 8
Ulepszenia w JDK 8u5
1) Zmniejszono częstotliwość wyświetlania monitów bezpieczeństwa dotyczących aplikacji.
Ulepszenia w JDK 8u11
1) Opcja wstrzymywania ofert od sponsorów podczas instalacji lub aktualizacji środowiska JRE jest dostępna na karcie Zaawansowane w Panelu sterowania Java.
2) Atrybut Entry-Point można uwzględnić w manifeście pliku JAR, aby zidentyfikować jedną lub więcej klas jako prawidłowy punkt wejścia dla Twojej aplikacji RIA (Rich Internet).
Ulepszenia w JDK 8u20
1) Nazwa narzędzia javafxpackager została zmieniona na javapackager. To narzędzie zostało wzbogacone o nowe argumenty dla samodzielnych pakietów aplikacji.
Następujące ulepszenia dotyczą narzędzia Java:
- Dodano eksperymentalną opcję kompilatora JIT związaną z ograniczoną pamięcią transakcyjną (RTM).
- Dodano kilka opcji związanych z deduplikacją ciągów znaków.
- Dodano kilka opcji związanych z elementami wewnętrznymi Advanced Encryption Standard (AES).
- Kombinacje opcji usuwania elementów bezużytecznych są przestarzałe.
2) Do wirtualnej maszyny Java HotSpot dodano przewodnik dostrajania zbierania śmieci. Opisuje moduły wyrzucające elementy bezużyteczne dołączone do maszyny wirtualnej Java HotSpot i pomaga zdecydować, który moduł wyrzucający elementy bezużyteczne może najlepiej zoptymalizować wydajność aplikacji, szczególnie jeśli obsługuje duże ilości danych (wiele gigabajtów), ma wiele wątków i ma wysokie współczynniki transakcji .
Ulepszenia w JDK 8u31
1) W tej wersji protokół SSLv3 został usunięty z opcji zaawansowanych panelu sterowania Java.
Ulepszenia w JDK 8u40
Narzędzie Java
1) Dodano opcję -XX:+CheckEndorsedAndExtDirs, ponieważ mechanizm obejścia zatwierdzonych standardów (JDK-8065675) i mechanizm rozszerzenia (JDK-8065702) stały się przestarzałe. Ta opcja pomaga zidentyfikować wszelkie istniejące zastosowania tych mechanizmów i jest obsługiwana w JDK 7u80 i JDK 8u40.
2) Java Flight Recorder (JFR) oferuje różne sposoby odblokowywania funkcji komercyjnych i włączania JFR w czasie wykonywania aplikacji.
Zawiera opcje wiersza poleceń Java, takie jak polecenia diagnostyczne jcmd i elementy sterujące graficznego interfejsu użytkownika (GUI) w ramach Java Mission Control. Ta elastyczność umożliwia zapewnienie odpowiednich opcji podczas uruchamiania lub późniejszą interakcję z JFR.
3) Opcja -XX:StartFlightRecording=parametr=wartość ma nowy parametr dumponexit=true, który określa, czy plik zrzutu danych JFR powinien być generowany, gdy maszyna JVM kończy się w kontrolowany sposób.
4) Opcje związane z ograniczoną pamięcią transakcyjną (RTM) nie są już eksperymentalne. Opcje te obejmują -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=number_of_retries, -XX:+UseRTMDeopt i -XX:+UseRTMLocking.
5) W Javie 8 wprowadzono udostępnianie danych klasy aplikacji (AppCDS). AppCDS rozszerza CDS (Class Data Sharing), aby umożliwić umieszczanie klas ze standardowych katalogów rozszerzeń i ścieżki klas aplikacji we współdzielonym archiwum. Jest to funkcja komercyjna i nie jest już uważana za eksperymentalną.
6) Dodano nowe opcje -XX:+ResourceManagement i -XX:ResourceManagementSampleInterval=wartość.
7) Dodano dodatkowe informacje o dużych stronach. Duże strony, zwane także ogromnymi stronami, to strony pamięci, które są znacznie większe niż standardowy rozmiar strony pamięci. Duże strony optymalizują bufory Translation-Lookaside procesora. Opcje systemu Linux -XX:+UseHugeTLBFS, -XX:+UseSHM i -XX:+UseTransparentHugePages zostały udokumentowane.
8) Udokumentowano opcję -XX:ObjectAlignmentInBytes=alignment.
Narzędzie JJS
1) Dodano opcję --optimistic-types=[true|false]. Włącza lub wyłącza założenia typu optymistycznego z rekompilacją deoptymalizującą.
2) Do narzędzia jjs dodano opcję --language=[es5]. Określa wersję języka ECMAScript.
Narzędzie Javapackager
1) Nowe argumenty są dostępne dla programów pakujących OS X. Argument mac.CFBundleVersion określa wewnętrzny numer wersji, który ma zostać użyty.
2) Argument mac.dmg.simple wskazuje, czy kroki dostosowywania DMG zależne od wykonania kodu AppleScript są pomijane.
Narzędzie Jcmd
Narzędzie Jcmd służy do dynamicznej interakcji z Java Flight Recorder (JFR). Można go używać do odblokowania funkcji komercyjnych, włączania/rozpoczynania/zatrzymywania nagrań lotów i uzyskiwania różnych komunikatów o stanie z systemu.
Narzędzie Jstat
Narzędzie jstat zostało zaktualizowane o informacje o skompresowanej przestrzeni klas, która jest specjalną częścią metaprzestrzeni.
Maszyna wirtualna
Funkcja skalowalnego śledzenia pamięci natywnej HotSpot VM pomaga diagnozować wycieki pamięci maszyn wirtualnych i wyjaśniać użytkownikom, kiedy wycieki pamięci nie występują w maszynie wirtualnej. Native Memory Tracker można uruchomić bez samozamykania w dużych systemach i bez powodowania znaczącego wpływu na wydajność wykraczającego poza to, co jest uważane za akceptowalne w przypadku małych programów.