logo

Caracteristici Java 8

Oracle a lansat o nouă versiune de Java ca Java 8 în 18 martie 2014. A fost o versiune revoluționară a platformei de dezvoltare software Java. Include diverse upgrade-uri la programarea Java, JVM, instrumente și biblioteci.

Îmbunătățiri ale limbajului de programare Java 8

Java 8 oferă următoarele caracteristici pentru programarea Java:

  • expresii lambda,
  • Referințe de metodă,
  • interfețe funcționale,
  • Stream API,
  • Metode implicite,
  • Decodare codificare Base64,
  • Metode statice în interfață,
  • Clasa optionala,
  • Clasa de colecționari,
  • Metoda ForEach(),
  • Motorul JavaScript Rhino,
  • Sortare paralelă,
  • Tastați și repetați adnotările,
  • Îmbunătățiri IO,
  • Îmbunătățiri de concurență,
  • Îmbunătățiri JDBC etc.

Expresii Lambda

Expresia Lambda ne ajută să ne scriem codul în stil funcțional. Oferă o modalitate clară și concisă de a implementa interfața SAM (metoda abstractă unică) prin utilizarea unei expresii. Este foarte util în biblioteca de colecții în care ajută la iterarea, filtrarea și extragerea datelor.

Pentru mai multe informații și exemple: click aici


Referințe de metodă

Referința la metoda Java 8 este folosită pentru a face referire la metoda interfeței funcționale. Este o formă compactă și ușoară de exprimare lambda. De fiecare dată când utilizați expresia lambda doar pentru a trimite o metodă, puteți înlocui expresia lambda cu referința la metodă.

Pentru mai multe informații și exemple: click aici


Interfață funcțională

O interfață care conține o singură metodă abstractă este cunoscută ca interfață funcțională. Poate avea orice număr de metode implicite și statice. De asemenea, poate declara metode ale clasei de obiecte.

Interfețele funcționale sunt cunoscute și ca interfețe cu metode abstracte unice (SAM Interfaces).

Pentru mai multe informații și exemple: click aici


Opțional

Java a introdus o nouă clasă Opțional în Java 8. Este o clasă finală publică care este folosită pentru a trata NullPointerException în aplicația Java. Trebuie să importam java.util pachet pentru a utiliza această clasă. Oferă metode de verificare a prezenței valorii pentru o anumită variabilă.

Pentru mai multe informații și exemple: click aici


pentru fiecare

Java oferă o nouă metodă pentru fiecare() pentru a repeta elementele. Este definit în interfețele Iterable și Stream.

Este o metodă implicită definită în interfața Iterable. Clasele de colecție care extind interfața Iterable pot folosi metoda forEach() pentru a repeta elemente.

Această metodă ia un singur parametru care este o interfață funcțională. Deci, puteți trece expresia lambda ca argument.

Pentru mai multe informații și exemple: click aici


Date/Time API

Java a introdus un nou API Date and Time începând cu Java 8. Pachetul java.time conține clase Java 8 Date și Ora.

Pentru mai multe informații și exemple: click aici


Metode implicite

Java oferă o facilitate pentru a crea metode implicite în interiorul interfeței. Metodele care sunt definite în interiorul interfeței și etichetate cu cuvântul cheie implicit sunt cunoscute ca metode implicite. Aceste metode sunt metode non-abstracte și pot avea corp de metodă.

Pentru mai multe informații și exemple: click aici


Motorul JavaScript Rhino

Nashorn este un motor JavaScript. Este folosit pentru a executa cod JavaScript în mod dinamic la JVM (Java Virtual Machine). Java oferă un instrument de linie de comandă etc care este folosit pentru a executa codul JavaScript.

Puteți executa cod JavaScript în două moduri:

  1. Folosind instrumentul de linie de comandă jjs și
  2. Prin încorporarea în codul sursă Java.

Pentru mai multe informații și exemple: click aici


StringJoiner

Java a adăugat o nouă clasă finală StringJoiner în pachetul java.util. Este folosit pentru a construi o secvență de caractere separate printr-un delimitator. Acum, puteți crea șir de caractere trecând delimitatori precum virgulă (,), cratimă (-) etc.

ce este hibernare în java

Pentru mai multe informații și exemple: click aici


Colectionari

Collectors este o clasă finală care extinde clasa Object. Oferă operațiuni de reducere, cum ar fi acumularea elementelor în colecții, rezumarea elementelor în funcție de diverse criterii etc.

Pentru mai multe informații și exemple: click aici


API Stream

Pachetul Java 8 java.util.stream constă din clase, interfețe și o enumerare pentru a permite operațiuni în stil funcțional asupra elementelor. Efectuează calcul leneș. Deci, se execută numai atunci când o cere.

Pentru mai multe informații și exemple: click aici


Filtrul de flux

Fluxul Java oferă o metodă filter() pentru a filtra elementele fluxului pe baza predicatului dat. Să presupunem că doriți să obțineți doar elemente pare ale listei dvs., puteți face acest lucru cu ușurință cu ajutorul metodei filter().

Această metodă ia predicatul ca argument și returnează un flux de elemente rezultate.

Pentru mai multe informații și exemple: click aici


Codare și decodare Java Base64

Java oferă o clasă Base64 pentru a se ocupa de criptare și decriptare. Trebuie să importați clasa java.util.Base64 în fișierul sursă pentru a utiliza metodele acesteia.

Această clasă oferă trei codificatoare și decodoare diferite pentru a cripta informațiile la fiecare nivel.

Pentru mai multe informații și exemple: click aici


Sortare Java Parallel Array

Java oferă o nouă caracteristică suplimentară în clasa Arrays, care este folosită pentru a sorta elementele matricei în paralel. Metoda parallelSort() a fost adăugată la clasa java.util.Arrays care utilizează grupul comun de paralelism JSR 166 Fork/Join pentru a oferi sortarea matricelor. Este o metodă supraîncărcată.

Pentru mai multe informații și exemple: click aici


Îmbunătățiri de securitate Java 8

1) Furnizorul Java Secure Socket Extension (JSSE) activează protocoalele Transport Layer Security (TLS) 1.1 și TLS 1.2 în mod implicit pe partea clientului.

2) A fost adăugată o metodă îmbunătățită AccessController.doPrivileged care permite codului să-și afirme un subset de privilegii, fără a împiedica traversarea completă a stivei pentru a verifica alte permisiuni.

3) Algoritmii Advanced Encryption Standard (AES) și Password-Based Encryption (PBE), precum PBEWithSHA256AndAES_128 și PBEWithSHA512AndAES_256 au fost adăugați furnizorului SunJCE.

4) Extensia Java Secure Socket (SunJSSE) a activat extensia Server Name Indication (SNI) pentru aplicațiile client în mod implicit în JDK 7, iar JDK 8 acceptă extensia SNI pentru aplicațiile server. Extensia SNI este o caracteristică care extinde protocoalele SSL/TLS pentru a indica numele serverului la care clientul încearcă să se conecteze în timpul acordării de mână.

5) SunJSSE este îmbunătățit pentru a suporta algoritmi de criptare autentificată cu date asociate (AEAD). Furnizorul Java Cryptography Extension (SunJCE) este îmbunătățit pentru a suporta implementarea cifrului AES/GCM/NoPadding, precum și parametrii algoritmului Galois/Counter Mode (GCM).

6) Un nou semnal de comandă -importpassword este adăugat la utilitarul keytool. Este folosit pentru a accepta o parolă și pentru a o stoca în siguranță ca cheie secretă. Clase precum java.security.DomainLoadStoreParameter și java.security.PKCS12Attribute sunt adăugate pentru a accepta tipul de depozit de chei DKS.

7) În JDK 8, algoritmii criptografici au fost îmbunătățiți cu varianta SHA-224 a familiei SHA-2 de implementări de tip mesaj-digest.

8) Suport îmbunătățit pentru NSA Suite B Criptography, care include:

  • Înregistrarea OID pentru algoritmii de criptare NSA Suite B
  • Suport pentru generarea de perechi de chei DSA pe 2048 de biți și algoritmi de semnătură suplimentari pentru cheile DSA pe 2048 de biți, cum ar fi SHA224withDSA și SHA256withDSA.
  • Ridicarea restricției de dimensiune a tastelor de la 1024 la 2048 pentru algoritmul Diffie-Hellman (DH).

9) Clasa SecureRandom oferă generarea de numere aleatoare criptografic puternice, care sunt utilizate pentru chei private sau publice, cifruri și mesaje semnate. Metoda getInstanceStrong() a fost introdusă în JDK 8, care returnează o instanță a celui mai puternic SecureRandom. Ar trebui să fie folosit atunci când trebuie să creați cheie privată și publică RSA. SecureRandom include următoarele alte modificări:

  • Două noi implementări au fost introduse pentru platformele UNIX, care oferă un comportament de blocare și non-blocare.

10) Este inclusă o nouă clasă PKIXRevocationChecker care verifică starea de revocare a certificatelor cu algoritmul PKIX. Acceptă verificarea celor mai bune eforturi, verificarea certificatelor de entitate finală și opțiuni specifice mecanismului.

11) Standardele Public Key Cryptography Standards 11 (PKCS) au fost extinse pentru a include suporturi pe 64 de biți pentru Windows.

12) Două noi tipuri de rcache sunt adăugate la Kerberos 5. Tastați none înseamnă că nu există deloc rcache, iar tipul dfl înseamnă rcache-ul bazat pe fișiere în stil DFL. De asemenea, subcheia cerută de acceptor este acum acceptată. Acestea sunt configurate folosind proprietățile sistemului sun.security.krb5.rcache și sun.security.krb5.acceptor.subkey.

13) În JDK 8, tranziția protocolului Kerberos 5 și delegarea constrânsă sunt acceptate în același domeniu.

14) Java 8 a dezactivat implicit criptarea slabă. Tipurile de criptare Kerberos 5 legate de DES nu sunt acceptate implicit. Aceste tipuri de criptare pot fi activate adăugând allow_weak_crypto=true în fișierul krb5.conf.

15) Puteți seta numele serverului la null pentru a indica un server nelegat. Înseamnă că un client poate solicita serviciul folosind orice nume de server. După ce se stabilește un context, serverul poate prelua numele ca proprietate negociată cu numele cheii SASL.BOUND_SERVER_NAME.

16) Puntea Java Native Interface (JNI) către Java Generic Security Service (JGSS) nativ este acum acceptată pe Mac OS X. Puteți seta proprietatea sistemului sun.security.jgss.native la true pentru a o activa.

17) O nouă proprietate de sistem, jdk.tls.ephemeralDHKeySize este definită pentru a personaliza dimensiunile cheilor DH efemere. Dimensiunea minimă acceptabilă a cheii DH este de 1024 de biți, cu excepția suitelor de criptare exportabile sau a modului moștenit (jdk.tls.ephemeralDHKeySize=legacy).

18) Furnizorul Java Secure Socket Extension (JSSE) respectă în mod implicit preferințele clientului pentru suita de criptare. Cu toate acestea, comportamentul poate fi modificat pentru a respecta preferința de suită de criptare a serverului apelând SSLParameters.setUseCipherSuitesOrder(true) peste server.


Îmbunătățiri pentru instrumentele Java 8

1) Este introdusă o comandă jjs, care invocă motorul Nashorn fie în modul shell interactiv, fie pentru a interpreta fișierele script.

pentru string array java

2) Comanda java este capabilă să lanseze aplicații JavaFX, cu condiția ca aplicația JavaFX să fie ambalată corect.

3) Pagina de manual pentru comandă java (atât nroff, cât și HTML) a fost complet reproiectată. Opțiunile avansate sunt acum împărțite în Runtime, Compiler, Garbage Collection și Serviceability, în funcție de zona pe care o afectează. Mai multe opțiuni care lipseau anterior sunt acum descrise. Există, de asemenea, o secțiune pentru opțiunile care au fost depreciate sau eliminate de la ediția anterioară.

4) Noul instrument de linie de comandă jdeps permite dezvoltatorului să analizeze fișierele de clasă pentru a determina dependențele la nivel de pachet sau la nivel de clasă.

5) Puteți accesa comenzile de diagnosticare de la distanță, care anterior erau accesibile doar local prin instrumentul jcmd. Accesul de la distanță este oferit folosind Java Management Extensions (JMX), astfel încât comenzile de diagnosticare sunt expuse unui MBean al platformei înregistrat pe serverul MBean al platformei. MBeanul este interfața com.sun.management.DiagnosticCommandMBean.

6) O nouă opțiune -tsapolicyid este inclusă în instrumentul jarsigner, care vă permite să solicitați o ștampilă de timp semnată de la o autoritate de marcare temporală și să o atașați la un fișier JAR semnat.

7) Este inclusă o nouă metodă java.lang.reflect.Executable.getParameters care vă permite să accesați numele parametrilor formali ai oricărei metode sau constructor. Cu toate acestea, fișierele .class nu stochează în mod implicit numele de parametri formali. Pentru a stoca nume de parametri formali într-un anumit fișier .class și, astfel, pentru a permite API-ului Reflection să recupereze nume de parametri formali, compilați fișierul sursă cu opțiunea -parameters a compilatorului javac.

8) Regulile de tip pentru comparațiile binare din Secțiunea 15.21 Java Language Specification (JLS) vor fi acum aplicate corect de javac.

9) În această versiune, instrumentul apt și API-ul său asociat conținute în pachetul com.sun.mirror au fost eliminate.

Îmbunătățiri Javadoc

În Java SE 8, următoarele noi API-uri au fost adăugate la instrumentul Javadoc.

  • Un nou API DocTree introduce un scanner care vă permite să traversați codul sursă care este reprezentat de un arbore de sintaxă abstractă. Aceasta extinde API-ul Compiler Tree pentru a oferi acces structurat la conținutul comentariilor javadoc.
  • Pachetul javax.tools conține clase și interfețe care vă permit să invocați instrumentul Javadoc direct dintr-o aplicație Java, fără a executa un nou proces.
  • Secțiunea „Rezumatul metodei” din documentația generată a unei clase sau interfețe a fost restructurată. Descrierile metodelor din această secțiune sunt grupate după tip. În mod implicit, toate metodele sunt listate. Puteți face clic pe o filă pentru a vizualiza metode de un anumit tip (static, instanță, abstract, concret sau depreciate, dacă există în clasă sau interfață).
  • Instrumentul javadoc are acum suport pentru verificarea conținutului comentariilor javadoc pentru probleme care ar putea duce la diverse probleme, precum HTML nevalid sau probleme de accesibilitate, în fișierele care sunt generate de javadoc. Caracteristica este activată implicit și poate fi controlată și de noua opțiune -Xdoclint.

Îmbunătățiri Pack200

Formatul de fișier de clasă Java a fost actualizat din cauza JSR 292, care acceptă limbaje tipizate dinamic pe platforma Java.

Motorul Pack200 a fost actualizat pentru a se asigura că fișierele de clasă Java SE 8 sunt comprimate eficient. Acum, poate recunoaște intrări constante în pool și noile bytecodes introduse de JSR 292. Ca rezultat, fișierele comprimate create cu această versiune a instrumentului pack200 nu vor fi compatibile cu versiunile mai vechi ale instrumentului unpack200.


Îmbunătățiri I/O Java 8

În Java 8, există câteva îmbunătățiri ale implementărilor java.nio.charset.Charset și ale seturilor de caractere extinse. Acesta include următoarele:

  • Un nou SelectorProvider care poate îmbunătăți performanța sau scalabilitatea pentru server. /dev/poll SelectorProvider continuă să fie implicit. Pentru a utiliza mecanismul portului de eveniment Solaris, rulați cu proprietatea de sistem java.nio.channels.spi.Selector setată la valoarea sun.nio.ch.EventPortSelectorProvider.
  • Dimensiunea fișierului /jre/lib/charsets.jar este redusă.
  • Performanța a fost îmbunătățită pentru constructorul java.lang.String(byte[], ∗) și metoda java.lang.String.getBytes().

Îmbunătățiri de rețea Java 8

1) A fost adăugată o nouă clasă java.net.URLPermission. Reprezintă o permisiune pentru accesarea unei resurse definite de o anumită adresă URL.

2) A fost adăugat un pachet jdk.net care conține opțiuni de socket specifice platformei și un mecanism pentru setarea acestor opțiuni pe toate tipurile de socket standard. Opțiunile de socket sunt definite în jdk.net.ExtendedSocketOptions.

3) În clasa HttpURLConnection, dacă este instalat un manager de securitate și dacă este apelată o metodă care are ca rezultat o încercare de a deschide o conexiune, apelantul trebuie să posede fie o permisiune de conectare SocketPermission la combinația gazdă/port a adresei URL de destinație, fie o URLPermission care permite această solicitare.

Dacă redirecționarea automată este activată și această solicitare este redirecționată către o altă destinație, apelantul trebuie să aibă și permisiunea de a se conecta la gazda/URL-ul redirecționat.


Îmbunătățiri de concurență Java 8

Pachetul java.util.concurrent a adăugat două interfețe noi și patru clase noi.

Interfețe Java.util.concurrent

Interfață Descriere
interfață publică statică CompletableFuture.AsynchronousCompletionTask Este o interfață de marcare care este utilizată pentru a identifica sarcinile asincrone produse prin metode asincrone. Poate fi util pentru monitorizarea, depanarea și urmărirea activităților asincrone.
interfață publică CompletionStage Acesta creează o etapă a unui calcul posibil asincron, care efectuează o acțiune sau calculează o valoare atunci când se finalizează un alt CompletionStage.

Clasele Java.util.concurrent

Clasă Descriere
clasă publică CompletableFuture extinde Object implementează Future, CompletionStage Este un Viitor care poate fi finalizat în mod explicit și poate fi folosit ca Etapă de Finalizare, susținând funcții și acțiuni dependente care se declanșează la finalizarea sa.
clasă publică statică ConcurrentHashMap.KeySetView extinde Obiectul de implementare Set, Serializable Este o vizualizare a unui ConcurrentHashMap ca un set de chei, în care adăugările pot fi opționale activate prin maparea la o valoare comună.
Clasa abstractă publică CountedCompleter extinde ForkJoinTask Un ForkJoinTask cu o acțiune de finalizare efectuată atunci când este declanșată și nu mai există acțiuni în așteptare.
clasă publică CompletionException extinde RuntimeException Aruncă o excepție atunci când o eroare sau o altă excepție este întâlnită în cursul finalizării unui rezultat sau a unei sarcini.

Metode noi în clasa java.util.concurrent.ConcurrentHashMap

Clasa ConcurrentHashMap introduce mai multe metode noi în cea mai recentă versiune. Include diverse metode forEach (forEach, forEachKey, forEachValue și forEachEntry), metode de căutare (search, searchKeys, searchValues ​​și searchEntries) și un număr mare de metode de reducere (reduce, reduceToDouble, reduceToLong etc.). Au fost adăugate și alte metode diverse (mappingCount și newKeySet).

Clase noi în java.util.concurrent.atomic

Cea mai recentă versiune introduce suport scalabil, actualizabil și variabil printr-un set mic de clase noi DoubleAccumulator, DoubleAdder, LongAccumulator șiLongAdder. Utilizează intern tehnici de reducere a conflictelor care oferă îmbunătățiri uriașe ale debitului în comparație cu variabilele atomice.

Clasă Descriere
Public class DoubleAccumulator extinde Number implementează Serializable Este folosit pentru una sau mai multe variabile care mențin împreună o valoare dublă care rulează, actualizată folosind o funcție furnizată.
clasa publică DoubleAdder extinde Number implementează Serializable Este folosit pentru una sau mai multe variabile care împreună mențin o sumă dublă inițial zero.
clasă publică LongAccumulator extinde Number implementează Serializable Este folosit pentru una sau mai multe variabile care împreună mențin o valoare lungă de rulare actualizată folosind o funcție furnizată.
clasă publică LongAdder extinde Number implementează Serializable Este folosit pentru una sau mai multe variabile care împreună mențin o sumă lungă inițial zero.

Noi metode în java.util.concurrent.ForkJoinPool Class

Această clasă a adăugat două metode noi getCommonPoolParallelism() și commonPool(), care returnează nivelul de paralelism vizat al pool-ului comun sau, respectiv, al instanței pool-ului comun.

Metodă Descriere
public static ForkJoinPool commonPool() Returnează instanța pool-ului comun.
Public static int getCommonPoolParallelism() Returnează nivelul de paralelism vizat al pool-ului comun.

Noua clasă java.util.concurrent.locks.StampedLock

Se adaugă o nouă clasă StampedLock care este utilizată pentru a adăuga blocare bazată pe capacități cu trei moduri de control al accesului de citire/scriere (scriere, citire și citire optimistă). Această clasă acceptă și metode care oferă în mod condiționat conversii în cele trei moduri.

Clasă Descriere
Clasa publică StampedLock extinde Obiectul implementează Serializable Această clasă reprezintă o blocare bazată pe capacități cu trei moduri pentru controlul accesului de citire/scriere.

API Java pentru procesare XML (JAXP) 1.6 Îmbunătățiri

În Java 8, Java API este adăugat pentru XML Processing (JAXP) 1.6. Necesită utilizarea facilitatii de încărcare a furnizorului de servicii, care este definită de java.util.ServiceLoader pentru a încărca servicii din fișierele de configurare a serviciilor.

Motivul pentru aceasta este de a permite modularizarea viitoare a platformei Java SE, unde furnizorii de servicii pot fi implementați prin alte mijloace decât fișierele JAR și poate fără fișierele de configurare a serviciului.


Îmbunătățiri ale mașinii virtuale Java

Verificarea instrucțiunilor invokespecial a fost înăsprită astfel încât să poată fi invocată doar o metodă de inițializare a instanței din clasa curentă sau superclasa directă a acesteia.


Java Mission Control 5.3 este inclus în Java 8

Java Mission Control (JMC) este un set avansat de instrumente care permite analiza eficientă și detaliată a datelor și oferă monitorizare și management Java avansate, discrete. JMC oferă secțiuni pentru domenii comune de analiză, cum ar fi performanța codului, memoria și latența.

Pachetele de limbă Babel în japoneză și chineză simplificată sunt acum incluse implicit în Java Mission Control care este inclus în JDK 8.


Îmbunătățiri de internaționalizare Java 8

1) Îmbunătățiri Unicode

JDK 8 include suport pentru Unicode 6.2.0. Conține următoarele caracteristici.

  • 733 de caractere noi, inclusiv semnul lirei turcești.
  • 7 scripturi noi:
    • Hieroglife meroitice
    • Cursiv meroitic
    • Sora Sompeng
    • Chakma
    • Sharada
    • Takri
    • Miao
  • 11 blocuri noi: inclusiv 7 blocuri pentru noile scripturi enumerate mai sus și 4 blocuri pentru următoarele scripturi existente:
  • arabă extinsă-A
  • Supliment Sundanez
  • Meeting Meek Extensions
  • Simboluri alfabetice matematice arabe

Adoptarea datelor Unicode CLDR și a proprietății de sistem java.locale.providers

Consorțiul Unicode a lansat proiectul Common Locale Data Repository (CLDR) pentru a „suporta limbile din lume, cu cel mai mare și mai extins depozit standard de date locale disponibile”. CLDR devine standardul de facto pentru datele locale. Datele locale bazate pe XML ale CLDR au fost încorporate în versiunea JDK 8, dar sunt dezactivate implicit.

Există patru surse distincte pentru datele locale:

  • CLDR reprezintă datele locale furnizate de proiectul Unicode CLDR.
  • HOST reprezintă personalizarea utilizatorului curent a setărilor sistemului de operare de bază. Funcționează numai cu localitatea implicită a utilizatorului, iar setările personalizabile pot varia în funcție de sistemul de operare, dar sunt acceptate în principal formatele de dată, oră, număr și monedă.
  • SPI reprezintă serviciile sensibile la nivel local implementate în furnizorii SPI instalați.
  • JRE reprezintă datele locale care sunt compatibile cu versiunile JRE anterioare.

Pentru a selecta sursa de date locale dorită, utilizați proprietatea de sistem java.locale.providers. enumerarea surselor de date în ordinea preferată. De exemplu: java.locale.providers=HOST,SPI,CLDR,JRE Comportamentul implicit este echivalent cu următoarea setare: java.locale.providers=JRE,SPI


Java 8 Calendar nou și API-uri locale

JDK 8 include două clase noi, câteva metode noi și o nouă valoare de returnare pentru o metodă statică existentă.

Două noi clase abstracte pentru furnizorii de servicii sunt adăugate la pachetul java.util.spi.

Clasă Descriere
clasa abstractă publică CalendarDataProvider extinde LocaleServiceProvider Este o clasă abstractă pentru furnizorii de servicii care furnizează parametri Calendar dependenți de localitate.
clasa abstractă publică CalendarNameProvider extinde LocaleServiceProvider Este o clasă abstractă pentru furnizorii de servicii care furnizează reprezentări de șiruri localizate (nume afișate) ale valorilor câmpurilor Calendar.

O metodă statică este acum capabilă să recunoască Locale.UNICODE_LOCALE_EXTENSION pentru sistemul de numerotare.

Metodă Descriere
public static final DecimalFormatSymbols getInstance(locale locale) Este folosit pentru a obține instanța DecimalFormatSymbols pentru localul specificat. Această metodă oferă acces la instanțe DecimalFormatSymbols pentru localitățile acceptate de runtime Java în sine, precum și pentru cele acceptate de implementările DecimalFormatSymbolsProvider instalate. Aruncă NullPointerException dacă localitatea este nulă.

S-au adăugat metode noi în API-ul calendar:

Metodă Descriere
public boolean isSupportedLocale (localizare locală) Returnează true dacă localitatea dată este acceptată de acest furnizor de servicii locale. Localitatea dată poate conține extensii care ar trebui luate în considerare pentru determinarea suportului. Este definit în clasa java.util.spi.LocaleServiceProvider
public String getCalendarType() Acesta returnează tipul de calendar al acestui calendar. Tipurile de calendar sunt definite de specificația Unicode Locale Data Markup Language (LDML). Este definit în clasa java.util.Calendar.

Noi specificatori de stil sunt adăugați pentru metodele Calendar.getDisplayName și Calendar.getDisplayNames pentru a determina formatul numelui Calendar.


Specificator Descriere
public static final int SHORT_FORMAT Este un specificator de stil pentru getDisplayName și getDisplayNames indicând un nume scurt folosit pentru format.
public static final int LONG_FORMAT Este un specificator de stil pentru getDisplayName și getDisplayNames care indică un nume lung folosit pentru format.
public static final int SHORT_STANDALONE Este un specificator de stil pentru getDisplayName și getDisplayNames care indică un nume scurt folosit independent, cum ar fi o abreviere de lună ca antete de calendar.
public static final int LONG_STANDALONE Este un specificator de stil pentru getDisplayName și getDisplayNames care indică un nume lung folosit independent, cum ar fi un nume de lună ca antete de calendar.

Două noi metode locale pentru a trata extensiile (opționale) ale unui local.

Metodă Descriere
boolean public hasExtensions() Returnează adevărat dacă această locală are extensii.
public Locale stripExtensions() Returnează o copie a acestei secțiuni locale fără extensii. Dacă această locală nu are extensii, această locală este returnată ea însăși.

Două noi metode Locale.filter returnează o listă de instanțe Locale care corespund criteriilor specificate, așa cum sunt definite în RFC 4647:

Metodă Descriere
Filtru de listă static public (Lista priorități de listă, localități ale colecțiilor) Returnează o listă a instanțelor locale care se potrivesc folosind mecanismul de filtrare definit în RFC 4647. Acesta este echivalent cu filter(List, Collection, FilteringMode) când modul este Locale.FilteringMode.AUTOSELECT_FILTERING.
Filtru de listă static public (Lista priorități de listă, localități de colecție, modul Locale.FilteringMode) Returnează o listă de instanțe locale care se potrivesc folosind mecanismul de filtrare definit în RFC 4647.

Două noi metode Locale.filterTags returnează o listă de etichete de limbă care corespund criteriilor specificate, așa cum sunt definite în RFC 4647.

Metodă Descriere
public static List filterTags(List priorityList, Collection tags) Returnează o listă de etichete de limbi care se potrivesc folosind mecanismul de filtrare de bază definit în RFC 4647. Acesta este echivalent cu filterTags(List, Collection, FilteringMode) când modul este Locale.FilteringMode.AUTOSELECT_FILTERING.
public static List filterTags(List priorityList, Collection tags, Locale.FilteringMode mode) Returnează o listă de etichete de limbi care se potrivesc folosind mecanismul de filtrare de bază definit în RFC 4647.

Două noi metode de căutare returnează cea mai bună corespondență locală sau eticheta de limbă folosind mecanismul de căutare definit în RFC 4647.

Metodă Descriere
Căutare locală publică statică (Listă priorități Listă, localități ale colecției) Returnează o instanță Locale pentru eticheta de limbă care se potrivește cel mai bine folosind mecanismul de căutare definit în RFC 4647.
Etichetă de căutare șir de caractere static public(Lista priorități, etichete de colecție) Returnează eticheta de limbă cea mai potrivită folosind mecanismul de căutare definit în RFC 4647.

Alte îmbunătățiri ale versiunii Java 8

Îmbunătățiri în JDK 8u5

1) Frecvența în care sunt afișate solicitările de securitate pentru o aplicație a fost redusă.


Îmbunătățiri în JDK 8u11

1) O opțiune de suprimare a ofertelor de la sponsori atunci când JRE este instalat sau actualizat este disponibilă în fila Avansat din panoul de control Java.

2) Atributul Entry-Point poate fi inclus în manifestul fișierului JAR pentru a identifica una sau mai multe clase ca punct de intrare valid pentru RIA (aplicația Rich Internet).


Îmbunătățiri în JDK 8u20

1) Instrumentul javafxpackager a fost redenumit în javapackager. Acest instrument a fost îmbunătățit cu noi argumente pentru pachetele de aplicații autonome.

Următoarele îmbunătățiri sunt legate de instrumentul java:

  • A fost adăugată o opțiune experimentală de compilare JIT legată de Memoria tranzacțională restricționată (RTM).
  • Au fost adăugate mai multe opțiuni legate de deduplicarea șirurilor.
  • Au fost adăugate mai multe opțiuni legate de standardul de criptare avansat (AES) intrinseci.
  • Combinațiile de opțiuni de colectare a gunoiului au fost depreciate.

2) Ghidul de reglare pentru colectarea gunoiului a fost adăugat la mașina virtuală Java HotSpot. Descrie colectorii de gunoi incluși cu Java HotSpot VM și vă ajută să decideți care colector de gunoi poate optimiza cel mai bine performanța aplicației dvs., mai ales dacă gestionează cantități mari de date (mai mulți gigaocteți), are multe fire și are rate ridicate de tranzacții. .


Îmbunătățiri în JDK 8u31

1) În această versiune, protocolul SSLv3 este eliminat din opțiunile avansate Java Control Panel.


Îmbunătățiri în JDK 8u40

Instrument Java

1) -XX:+CheckEndorsedAndExtDirs a fost adăugat deoarece mecanismul de înlocuire a standardelor aprobate (JDK-8065675) și mecanismul de extensie (JDK-8065702) au fost depreciate. Opțiunea ajută la identificarea oricăror utilizări existente ale acestor mecanisme și este acceptată în JDK 7u80 și JDK 8u40.

2) Java Flight Recorder (JFR) oferă o varietate de moduri de a debloca funcții comerciale și de a activa JFR în timpul rulării unei aplicații.

Include opțiuni de linie de comandă java, cum ar fi comenzile de diagnosticare jcmd și controalele interfeței grafice cu utilizatorul (GUI) în cadrul Java Mission Control. Această flexibilitate vă permite să oferiți opțiunile adecvate la pornire sau să interacționați cu JFR mai târziu.

3) Opțiunea -XX:StartFlightRecording=parameter=value are un nou parametru, dumponexit=true, care specifică dacă un fișier dump de date JFR ar trebui să fie generat când JVM-ul se termină într-o manieră controlată.

4) Opțiunile legate de Memoria tranzacțională restricționată (RTM) nu mai sunt experimentale. Aceste opțiuni includ -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=număr_de_încercări, -XX:+UseRTMDeopt și -XX:+UseRTMLocking.

5) În Java 8, a fost introdus Partajarea de date a clasei de aplicații (AppCDS). AppCDS extinde CDS (Class Data Sharing) pentru a permite ca clasele din directoarele standard de extensii și calea clasei aplicației să fie plasate în arhiva partajată. Aceasta este o caracteristică comercială și nu mai este considerată experimentală.

6) Au fost adăugate noi opțiuni -XX:+ResourceManagement și -XX:ResourceManagementSampleInterval=value.

7) Au fost adăugate informații suplimentare despre paginile mari. Paginile mari, cunoscute și sub numele de pagini uriașe, sunt pagini de memorie care sunt semnificativ mai mari decât dimensiunea standard a paginii de memorie. Paginile mari optimizează procesorul Translation-Lookaside Buffers. Opțiunile Linux -XX:+UseHugeTLBFS, -XX:+UseSHM și -XX:+UseTransparentHugePages au fost documentate.

8) Opțiunea -XX:ObjectAlignmentInBytes=alignment a fost documentată.

listează java în matrice

instrument JJS

1) A fost adăugată opțiunea --optimistic-types=[true|false]. Activează sau dezactivează ipotezele de tip optimist cu recompilarea dezoptimizantă.

2) Opțiunea --language=[es5] a fost adăugată la instrumentul jjs. Specifică versiunea limbajului ECMAScript.

Instrument Javapackager

1) Noi argumente sunt disponibile pentru pachetele OS X. Argumentul mac.CFBundleVersion identifică numărul intern al versiunii care trebuie utilizat.

2) Argumentul mac.dmg.simple indică dacă pașii de personalizare DMG care depind de executarea codului AppleScript sunt omisi.

Instrumentul Jcmd

Instrumentul Jcmd este folosit pentru a interacționa dinamic cu Java Flight Recorder (JFR). Îl puteți folosi pentru a debloca funcții comerciale, pentru a activa/porni/opri înregistrările de zbor și pentru a obține diverse mesaje de stare de la sistem.

Instrumentul Jstat

Instrumentul jstat a fost actualizat cu informații despre spațiul de clasă comprimat, care este o parte specială a metaspațiului.

Mașină virtuală

Caracteristica Scalable Native Memory Tracking HotSpot VM ajută la diagnosticarea scurgerilor de memorie VM și la clarificarea utilizatorilor atunci când scurgerile de memorie nu sunt în VM. Native Memory Tracker poate fi rulat fără auto-închidere pe sisteme mari și fără a provoca un impact semnificativ asupra performanței, dincolo de ceea ce este considerat acceptabil pentru programele mici.