logo

Funzionalità di Java 8

Oracle ha rilasciato una nuova versione di Java come Java 8 il 18 marzo 2014. È stata una versione rivoluzionaria della piattaforma di sviluppo software Java. Include vari aggiornamenti alla programmazione Java, JVM, strumenti e librerie.

Miglioramenti al linguaggio di programmazione Java 8

Java 8 fornisce le seguenti funzionalità per la programmazione Java:

  • Espressioni lambda,
  • Riferimenti al metodo,
  • Interfacce funzionali,
  • API di flusso,
  • Metodi predefiniti,
  • Decodifica codifica Base64,
  • Metodi statici nell'interfaccia,
  • Classe facoltativa,
  • Classe di collezionisti,
  • Metodo ForEach(),
  • Motore JavaScript di Rhino,
  • Ordinamento di array paralleli,
  • Digitare e ripetere annotazioni,
  • Miglioramenti dell'IO,
  • Miglioramenti della concorrenza,
  • Miglioramenti JDBC ecc.

Espressioni Lambda

L'espressione Lambda ci aiuta a scrivere il nostro codice in stile funzionale. Fornisce un modo chiaro e conciso per implementare l'interfaccia SAM (Single Abstract Method) utilizzando un'espressione. È molto utile nella libreria di raccolte in cui aiuta a ripetere, filtrare ed estrarre i dati.

Per ulteriori informazioni ed esempi: clicca qui


Riferimenti al metodo

Il riferimento al metodo Java 8 viene utilizzato per fare riferimento al metodo dell'interfaccia funzionale. È una forma compatta e semplice di espressione lambda. Ogni volta che utilizzi l'espressione lambda solo per fare riferimento a un metodo, puoi sostituire l'espressione lambda con il riferimento al metodo.

Per ulteriori informazioni ed esempi: clicca qui


Interfaccia funzionale

Un'interfaccia che contiene un solo metodo astratto è nota come interfaccia funzionale. Può avere un numero qualsiasi di metodi predefiniti e statici. Può anche dichiarare metodi della classe oggetto.

Le interfacce funzionali sono note anche come Single Abstract Method Interfaces (Interfacce SAM).

Per ulteriori informazioni ed esempi: clicca qui


Opzionale

Java ha introdotto una nuova classe Opzionale in Java 8. È una classe finale pubblica che viene utilizzata per gestire NullPointerException nell'applicazione Java. Dobbiamo importare java.util pacchetto per utilizzare questa classe. Fornisce metodi per verificare la presenza di valore per una particolare variabile.

Per ulteriori informazioni ed esempi: clicca qui


per ciascuno

Java fornisce un nuovo metodo forEach() per ripetere gli elementi. È definito nelle interfacce Iterable e Stream.

È un metodo predefinito definito nell'interfaccia Iterable. Le classi di raccolta che estendono l'interfaccia Iterable possono utilizzare il metodo forEach() per iterare gli elementi.

Questo metodo accetta un singolo parametro che è un'interfaccia funzionale. Quindi puoi passare l'espressione lambda come argomento.

Per ulteriori informazioni ed esempi: clicca qui


API data/ora

Java ha introdotto una nuova API Data e ora a partire da Java 8. Il pacchetto java.time contiene le classi Data e ora Java 8.

Per ulteriori informazioni ed esempi: clicca qui


Metodi predefiniti

Java fornisce la possibilità di creare metodi predefiniti all'interno dell'interfaccia. I metodi definiti all'interno dell'interfaccia e contrassegnati con la parola chiave predefinita sono noti come metodi predefiniti. Questi metodi sono metodi non astratti e possono avere un corpo del metodo.

Per ulteriori informazioni ed esempi: clicca qui


Motore JavaScript di Rhino

Nashorn è un motore JavaScript. Viene utilizzato per eseguire il codice JavaScript in modo dinamico su JVM (Java Virtual Machine). Java fornisce uno strumento da riga di comando eccetera che viene utilizzato per eseguire il codice JavaScript.

Puoi eseguire il codice JavaScript in due modi:

  1. Utilizzando lo strumento da riga di comando jjs e
  2. Incorporando nel codice sorgente Java.

Per ulteriori informazioni ed esempi: clicca qui


StringJoiner

Java ha aggiunto una nuova classe finale StringJoiner nel pacchetto java.util. Viene utilizzato per costruire una sequenza di caratteri separati da un delimitatore. Ora puoi creare una stringa passando delimitatori come virgola (,), trattino (-) ecc.

leone paragonato alla tigre

Per ulteriori informazioni ed esempi: clicca qui


Collezionisti

Collectors è una classe finale che estende la classe Object. Fornisce operazioni di riduzione, come accumulare elementi in raccolte, riassumere elementi secondo vari criteri, ecc.

Per ulteriori informazioni ed esempi: clicca qui


API di flusso

Il pacchetto Java 8 java.util.stream è costituito da classi, interfacce e un'enumerazione per consentire operazioni di stile funzionale sugli elementi. Esegue calcoli pigri. Quindi, viene eseguito solo quando richiesto.

Per ulteriori informazioni ed esempi: clicca qui


Filtro flusso

Il flusso Java fornisce un metodo filter() per filtrare gli elementi del flusso sulla base di un determinato predicato. Supponiamo che tu voglia ottenere solo elementi pari della tua lista, puoi farlo facilmente con l'aiuto del metodo filter().

Questo metodo accetta il predicato come argomento e restituisce un flusso di elementi risultanti.

Per ulteriori informazioni ed esempi: clicca qui


Codifica e decodifica Java Base64

Java fornisce una classe Base64 per gestire la crittografia e la decrittografia. È necessario importare la classe java.util.Base64 nel file sorgente per utilizzare i suoi metodi.

Questa classe fornisce tre diversi codificatori e decodificatori per crittografare le informazioni a ciascun livello.

Per ulteriori informazioni ed esempi: clicca qui


Ordinamento di array paralleli Java

Java fornisce una nuova funzionalità aggiuntiva nella classe Arrays che viene utilizzata per ordinare parallelamente gli elementi dell'array. Il metodo parallelSort() è stato aggiunto alla classe java.util.Arrays che utilizza il pool comune di parallelismo Fork/Join JSR 166 per fornire l'ordinamento degli array. È un metodo sovraccarico.

Per ulteriori informazioni ed esempi: clicca qui


Miglioramenti della sicurezza di Java 8

1) Il provider Java Secure Socket Extension (JSSE) abilita per impostazione predefinita i protocolli Transport Layer Security (TLS) 1.1 e TLS 1.2 sul lato client.

2) È stato aggiunto un metodo migliorato AccessController.doPrivileged che consente al codice di affermare un sottoinsieme dei suoi privilegi, senza impedire l'attraversamento completo dello stack per verificare altre autorizzazioni.

3) Gli algoritmi Advanced Encryption Standard (AES) e Password-Based Encryption (PBE), come PBEWithSHA256AndAES_128 e PBEWithSHA512AndAES_256 sono stati aggiunti al provider SunJCE.

4) Java Secure Socket Extension (SunJSSE) ha abilitato l'estensione SNI (Server Name Indication) per le applicazioni client per impostazione predefinita in JDK 7 e JDK 8 supporta l'estensione SNI per le applicazioni server. L'estensione SNI è una funzionalità che estende i protocolli SSL/TLS per indicare a quale nome di server il client sta tentando di connettersi durante l'handshake.

5) SunJSSE è stato migliorato per supportare gli algoritmi Authenticated Encryption with Associated Data (AEAD). Il provider Java Cryptography Extension (SunJCE) è stato migliorato per supportare l'implementazione della crittografia AES/GCM/NoPadding nonché i parametri dell'algoritmo Galois/Counter Mode (GCM).

6) Un nuovo flag di comando -importpassword viene aggiunto all'utilità keytool. Viene utilizzato per accettare una password e memorizzarla in modo sicuro come chiave segreta. Classi come java.security.DomainLoadStoreParameter e java.security.PKCS12Attribute vengono aggiunte per supportare il tipo di archivio chiavi DKS.

7) In JDK 8, gli algoritmi crittografici sono stati migliorati con la variante SHA-224 della famiglia SHA-2 di implementazioni di message-digest.

8) Supporto migliorato per la crittografia NSA Suite B che include:

  • Registrazione OID per algoritmi di crittografia NSA Suite B
  • Supporto per la generazione di coppie di chiavi DSA a 2048 bit e algoritmi di firma aggiuntivi per chiavi DSA a 2048 bit come SHA224withDSA e SHA256withDSA.
  • Eliminazione della limitazione della dimensione della chiave da 1024 a 2048 per l'algoritmo Diffie-Hellman (DH).

9) La classe SecureRandom fornisce la generazione di numeri casuali crittograficamente forti che vengono utilizzati per chiavi private o pubbliche, cifre e messaggi firmati. Il metodo getInstanceStrong() è stato introdotto in JDK 8, che restituisce un'istanza del SecureRandom più potente. Dovrebbe essere utilizzato quando è necessario creare una chiave pubblica e privata RSA. SecureRandom include le seguenti altre modifiche:

  • Sono state introdotte due nuove implementazioni per le piattaforme UNIX, che forniscono comportamenti bloccanti e non bloccanti.

10) È inclusa una nuova classe PKIXRevocationChecker che controlla lo stato di revoca dei certificati con l'algoritmo PKIX. Supporta il controllo best-effort, il controllo del certificato dell'entità finale e le opzioni specifiche del meccanismo.

11) Lo standard di crittografia a chiave pubblica 11 (PKCS) è stato ampliato per includere il supporto a 64 bit per Windows.

12) Due nuovi tipi di rcache vengono aggiunti a Kerberos 5. Il tipo none significa nessuna rcache e il tipo dfl indica la rcache basata su file in stile DFL. Inoltre, la sottochiave richiesta dall'accettatore è ora supportata. Vengono configurati utilizzando le proprietà di sistema sun.security.krb5.rcache e sun.security.krb5.acceptor.subkey.

13) In JDK 8, la transizione del protocollo Kerberos 5 e la delega vincolata sono supportate all'interno dello stesso ambito.

14) Java 8 ha disabilitato la crittografia debole per impostazione predefinita. I tipi di crittografia Kerberos 5 correlati a DES non sono supportati per impostazione predefinita. Questi tipi di crittografia possono essere abilitati aggiungendoallow_weak_crypto=true nel file krb5.conf.

15) È possibile impostare il nome del server su null per denotare un server non associato. Significa che un client può richiedere il servizio utilizzando qualsiasi nome di server. Dopo aver stabilito un contesto, il server può recuperare il nome come proprietà negoziata con il nome chiave SASL.BOUND_SERVER_NAME.

16) Il bridge Java Native Interface (JNI) per Java Generic Security Service (JGSS) nativo è ora supportato su Mac OS X. È possibile impostare la proprietà di sistema sun.security.jgss.native su true per abilitarlo.

17) Una nuova proprietà di sistema, jdk.tls.ephemeralDHKeySize è definita per personalizzare le dimensioni delle chiavi DH effimere. La dimensione minima accettabile della chiave DH è 1024 bit, ad eccezione dei pacchetti di crittografia esportabili o della modalità legacy (jdk.tls.ephemeralDHKeySize=legacy).

18) Il provider Java Secure Socket Extension (JSSE) rispetta la preferenza della suite di crittografia del client per impostazione predefinita. Tuttavia, il comportamento può essere modificato per rispettare la preferenza del pacchetto di crittografia del server chiamando SSLParameters.setUseCipherSuitesOrder(true) sul server.


Miglioramenti degli strumenti Java 8

1) Viene introdotto un comando jjs, che richiama il motore Nashorn sia in modalità shell interattiva, sia per interpretare file di script.

2) Il comando Java è in grado di avviare applicazioni JavaFX, a condizione che l'applicazione JavaFX sia confezionata correttamente.

raccolta Java

3) La pagina man dei comandi Java (sia nroff che HTML) è stata completamente rielaborata. Le opzioni avanzate sono ora suddivise in Runtime, Compilatore, Garbage Collection e Manutenzione, a seconda dell'area interessata. Vengono ora descritte diverse opzioni precedentemente mancanti. È inoltre presente una sezione per le opzioni deprecate o rimosse rispetto alla versione precedente.

4) Il nuovo strumento da riga di comando jdeps consente allo sviluppatore di analizzare i file di classe per determinare le dipendenze a livello di pacchetto o di classe.

5) È possibile accedere da remoto ai comandi di diagnostica, che in precedenza erano accessibili solo localmente tramite lo strumento jcmd. L'accesso remoto viene fornito utilizzando Java Management Extensions (JMX), quindi i comandi diagnostici vengono esposti a un MBean della piattaforma registrato sul server MBean della piattaforma. L'MBean è l'interfaccia com.sun.management.DiagnosticCommandMBean.

6) Una nuova opzione -tsapolicyid è inclusa nello strumento jarsigner che consente di richiedere un timestamp firmato da un'autorità di timestamp e allegarlo a un file JAR firmato.

7) È incluso un nuovo metodo java.lang.reflect.Executable.getParameters che consente di accedere ai nomi dei parametri formali di qualsiasi metodo o costruttore. Tuttavia, i file .class non memorizzano i nomi dei parametri formali per impostazione predefinita. Per memorizzare i nomi dei parametri formali in un particolare file .class e quindi consentire all'API Reflection di recuperare i nomi dei parametri formali, compilare il file di origine con l'opzione -parameters del compilatore javac.

8) Le regole di tipo per i confronti binari nella sezione 15.21 della Java Language Specifica (JLS) verranno ora applicate correttamente da javac.

9) In questa versione, lo strumento apt e la relativa API associata contenuti nel pacchetto com.sun.mirror sono stati rimossi.

Miglioramenti Javadoc

In Java SE 8, le seguenti nuove API sono state aggiunte allo strumento Javadoc.

  • Una nuova API DocTree introduce uno scanner che consente di attraversare il codice sorgente rappresentato da un albero di sintassi astratto. Ciò estende l'API Compiler Tree per fornire accesso strutturato al contenuto dei commenti javadoc.
  • Il pacchetto javax.tools contiene classi e interfacce che consentono di richiamare lo strumento Javadoc direttamente da un'applicazione Java, senza eseguire un nuovo processo.
  • La sezione 'Riepilogo del metodo' della documentazione generata di una classe o interfaccia è stata ristrutturata. Le descrizioni dei metodi in questa sezione sono raggruppate per tipo. Per impostazione predefinita, vengono elencati tutti i metodi. È possibile fare clic su una scheda per visualizzare i metodi di un tipo particolare (statici, di istanza, astratti, concreti o deprecati, se esistono nella classe o nell'interfaccia).
  • Lo strumento javadoc dispone ora del supporto per verificare il contenuto dei commenti javadoc per problemi che potrebbero portare a vari problemi, come HTML non valido o problemi di accessibilità, nei file generati da javadoc. La funzionalità è abilitata per impostazione predefinita e può anche essere controllata dalla nuova opzione -Xdoclint.

Miglioramenti del pacchetto 200

Il formato del file di classe Java è stato aggiornato a causa di JSR 292 che supporta le lingue tipizzate dinamicamente sulla piattaforma Java.

Il motore Pack200 è stato aggiornato per garantire che i file di classe Java SE 8 vengano compressi in modo efficace. Ora è in grado di riconoscere voci di pool costanti e nuovi bytecode introdotti da JSR 292. Di conseguenza, i file compressi creati con questa versione dello strumento pack200 non saranno compatibili con le versioni precedenti dello strumento unpack200.


Miglioramenti dell'I/O di Java 8

In Java 8 sono stati apportati diversi miglioramenti alle implementazioni java.nio.charset.Charset e al set di caratteri esteso. Include quanto segue:

  • Un nuovo SelectorProvider che può migliorare le prestazioni o la scalabilità per il server. Il /dev/poll SelectorProvider continua ad essere quello predefinito. Per utilizzare il meccanismo della porta eventi di Solaris, eseguire con la proprietà di sistema java.nio.channels.spi.Selector impostata sul valore sun.nio.ch.EventPortSelectorProvider.
  • La dimensione del file /jre/lib/charsets.jar è stata ridotta.
  • Le prestazioni sono state migliorate per il costruttore java.lang.String(byte[], ∗) e il metodo java.lang.String.getBytes().

Miglioramenti della rete Java 8

1) È stata aggiunta una nuova classe java.net.URLPermission. Rappresenta un permesso per accedere a una risorsa definita da un determinato URL.

2) È stato aggiunto un pacchetto jdk.net che contiene opzioni socket specifiche della piattaforma e un meccanismo per impostare queste opzioni su tutti i tipi di socket standard. Le opzioni del socket sono definite in jdk.net.ExtendedSocketOptions.

3) Nella classe HttpURLConnection, se è installato un gestore della sicurezza e se viene chiamato un metodo che risulta in un tentativo di aprire una connessione, il chiamante deve possedere un 'connect'SocketPermission alla combinazione host/porta dell'URL di destinazione o un URLPermission che consente questa richiesta.

Se il reindirizzamento automatico è abilitato e questa richiesta viene reindirizzata a un'altra destinazione, anche il chiamante deve disporre dell'autorizzazione per connettersi all'host/URL reindirizzato.


Miglioramenti della concorrenza Java 8

Il pacchetto java.util.concurrent ha aggiunto due nuove interfacce e quattro nuove classi.

Interfacce Java.util.concurrent

Interfaccia Descrizione
interfaccia statica pubblica CompletableFuture.AsynchronousCompletionTask Si tratta di un'interfaccia marcatore utilizzata per identificare attività asincrone prodotte da metodi asincroni. Potrebbe essere utile per il monitoraggio, il debug e il tracciamento delle attività asincrone.
interfaccia pubblica CompletionStage Crea una fase di un calcolo possibilmente asincrono, che esegue un'azione o calcola un valore quando viene completata un'altra CompletionStage.

Classi Java.util.concurrent

Classe Descrizione
la classe pubblica CompletableFuture estende l'oggetto implementa Future, CompletionStage È un futuro che può essere completato esplicitamente e può essere utilizzato come fase di completamento, supportando funzioni e azioni dipendenti che si attivano al suo completamento.
la classe statica pubblica ConcurrentHashMap.KeySetView estende l'oggetto implementa Set, Serializable È una visualizzazione di ConcurrentHashMap come un set di chiavi, in cui le aggiunte possono facoltativamente essere abilitate mappando a un valore comune.
la classe astratta pubblica CountedCompleter estende ForkJoinTask Un ForkJoinTask con un'azione di completamento eseguita quando attivato e non ci sono azioni rimanenti in sospeso.
la classe pubblica CompletionException estende RuntimeException Genera un'eccezione quando viene riscontrato un errore o un'altra eccezione durante il completamento di un risultato o di un'attività.

Nuovi metodi nella classe java.util.concurrent.ConcurrentHashMap

La classe ConcurrentHashMap introduce diversi nuovi metodi nella sua ultima versione. Include vari metodi forEach (forEach, forEachKey, forEachValue e forEachEntry), metodi di ricerca (search, searchKeys, searchValues ​​e searchEntries) e un gran numero di metodi di riduzione (reduce, reduceToDouble, reduceToLong ecc.). Sono stati aggiunti anche altri metodi vari (mappingCount e newKeySet).

Nuove classi in java.util.concurrent.atomic

L'ultima versione introduce un supporto variabile scalabile, aggiornabile attraverso un piccolo insieme di nuove classi DoubleAccumulator, DoubleAdder, LongAccumulator eLongAdder. Utilizza internamente tecniche di riduzione dei conflitti che forniscono enormi miglioramenti della produttività rispetto alle variabili atomiche.

Classe Descrizione
la classe pubblica DoubleAccumulator estende Number implementa Serializable Viene utilizzato per una o più variabili che insieme mantengono un valore double corrente aggiornato utilizzando una funzione fornita.
la classe pubblica DoubleAdder estende Number implementa Serializable Viene utilizzato per una o più variabili che insieme mantengono una doppia somma inizialmente pari a zero.
la classe pubblica LongAccumulator estende Number implementa Serializable Viene utilizzato per una o più variabili che insieme mantengono un valore lungo aggiornato utilizzando una funzione fornita.
la classe pubblica LongAdder estende Number implementa Serializable Viene utilizzato per una o più variabili che insieme mantengono una somma lunga inizialmente pari a zero.

Nuovi metodi nella classe java.util.concurrent.ForkJoinPool

Questa classe ha aggiunto due nuovi metodi getCommonPoolParallelism() e commonPool(), che restituiscono rispettivamente il livello di parallelismo target del pool comune o dell'istanza del pool comune.

Metodo Descrizione
pubblico statico ForkJoinPool commonPool() Restituisce l'istanza del pool comune.
Int statico pubblico getCommonPoolParallelism() Restituisce il livello di parallelismo target del pool comune.

Nuova classe java.util.concurrent.locks.StampedLock

Viene aggiunta una nuova classe StampedLock che viene utilizzata per aggiungere un blocco basato su capacità con tre modalità per controllare l'accesso in lettura/scrittura (scrittura, lettura e lettura ottimistica). Questa classe supporta anche metodi che forniscono conversioni condizionali nelle tre modalità.

Classe Descrizione
la classe pubblica StampedLock estende l'oggetto implementa Serializable Questa classe rappresenta un blocco basato sulle funzionalità con tre modalità per controllare l'accesso in lettura/scrittura.

Miglioramenti dell'API Java per l'elaborazione XML (JAXP) 1.6

In Java 8, viene aggiunta l'API Java per XML Processing (JAXP) 1.6. Richiede l'uso della funzione di caricamento del fornitore di servizi definita da java.util.ServiceLoader per caricare servizi dai file di configurazione del servizio.

La logica di ciò è consentire la futura modularizzazione della piattaforma Java SE in cui i fornitori di servizi possono essere distribuiti con mezzi diversi dai file JAR e magari senza i file di configurazione del servizio.


Miglioramenti della macchina virtuale Java

La verifica delle istruzioni invokespecial è stata rafforzata in modo che possa essere invocato solo un metodo di inizializzazione dell'istanza nella classe corrente o nella sua super classe diretta.


Java Mission Control 5.3 è incluso in Java 8

Java Mission Control (JMC) è un set avanzato di strumenti che consente un'analisi dei dati efficiente e dettagliata e fornisce monitoraggio e gestione Java avanzati e discreti. JMC fornisce sezioni per aree di analisi comuni come prestazioni del codice, memoria e latenza.

I pacchetti linguistici Babel in giapponese e cinese semplificato sono ora inclusi per impostazione predefinita in Java Mission Control incluso in JDK 8.


Miglioramenti dell'internazionalizzazione di Java 8

1) Miglioramenti Unicode

Il JDK 8 include il supporto per Unicode 6.2.0. Contiene le seguenti funzionalità.

  • 733 nuovi caratteri incluso il segno della lira turca.
  • 7 nuovi script:
    • Geroglifici meroitici
    • Corsivo meroitico
    • Sora Sompeng
    • Chakma
    • Sharada
    • Takri
    • Miao
  • 11 nuovi blocchi: inclusi 7 blocchi per i nuovi script sopra elencati e 4 blocchi per i seguenti script esistenti:
  • Arabo esteso-A
  • Supplemento sundanese
  • Incontro con le estensioni mansuete
  • Simboli alfabetici matematici arabi

Adozione dei dati Unicode CLDR e della proprietà di sistema java.locale.providers

Il Consorzio Unicode ha rilasciato il progetto Common Locale Data Repository (CLDR) per 'supportare le lingue del mondo, con il più grande ed esteso archivio standard di dati locali disponibili'. Il CLDR sta diventando lo standard de facto per i dati locali. I dati locali basati su XML di CLDR sono stati incorporati nella versione JDK 8, tuttavia sono disabilitati per impostazione predefinita.

Esistono quattro origini distinte per i dati locali:

  • CLDR rappresenta i dati locali forniti dal progetto Unicode CLDR.
  • HOST rappresenta la personalizzazione da parte dell'utente corrente delle impostazioni del sistema operativo sottostante. Funziona solo con le impostazioni internazionali predefinite dell'utente e le impostazioni personalizzabili possono variare a seconda del sistema operativo, ma sono supportati principalmente i formati di data, ora, numero e valuta.
  • SPI rappresenta i servizi sensibili alla locale implementati nei provider SPI installati.
  • JRE rappresenta i dati locali compatibili con le versioni JRE precedenti.

Per selezionare l'origine dati locale desiderata, utilizzare la proprietà di sistema java.locale.provviders. elencando le origini dati nell'ordine preferito. Ad esempio: java.locale.providers=HOST,SPI,CLDR,JRE Il comportamento predefinito è equivalente alla seguente impostazione: java.locale.providers=JRE,SPI


Java 8 Nuove API di calendario e impostazioni locali

JDK 8 include due nuove classi, diversi nuovi metodi e un nuovo valore restituito per un metodo statico esistente.

Due nuove classi astratte per i fornitori di servizi sono state aggiunte al pacchetto java.util.spi.

Classe Descrizione
la classe astratta pubblica CalendarDataProvider estende LocaleServiceProvider È una classe astratta per i fornitori di servizi che forniscono parametri di calendario dipendenti dalle impostazioni locali.
la classe astratta pubblica CalendarNameProvider estende LocaleServiceProvider Si tratta di una classe astratta per i provider di servizi che forniscono rappresentazioni di stringhe localizzate (nomi visualizzati) dei valori dei campi del calendario.

Un metodo statico è ora in grado di riconoscere Locale.UNICODE_LOCALE_EXTENSION per il sistema di numerazione.

Metodo Descrizione
public static final DecimalFormatSymbols getInstance(Locale locale) Viene utilizzato per ottenere l'istanza DecimalFormatSymbols per la locale specificata. Questo metodo fornisce l'accesso alle istanze DecimalFormatSymbols per le impostazioni locali supportate dal runtime Java stesso nonché per quelle supportate dalle implementazioni DecimalFormatSymbolsProvider installate. Genera NullPointerException se la locale è nulla.

Aggiunti nuovi metodi nell'API del calendario:

Metodo Descrizione
booleano pubblico isSupportedLocale(locale) Restituisce vero se la locale specificata è supportata da questo fornitore di servizi locali. La locale specificata può contenere estensioni che dovrebbero essere prese in considerazione per la determinazione del supporto. È definito nella classe java.util.spi.LocaleServiceProvider
stringa pubblica getCalendarType() Restituisce il tipo di calendario di questo calendario. I tipi di calendario sono definiti dalla specifica Unicode Locale Data Markup Language (LDML). È definito nella classe java.util.Calendar.

Sono stati aggiunti nuovi identificatori di stile per i metodi Calendar.getDisplayName e Calendar.getDisplayNames per determinare il formato del nome del calendario.


Specificatore Descrizione
public static final int SHORT_FORMAT È uno specificatore di stile per getDisplayName e getDisplayNames che indica un nome breve utilizzato per il formato.
public static final int LONG_FORMAT È un identificatore di stile per getDisplayName e getDisplayNames che indica un nome lungo utilizzato per il formato.
public static final int SHORT_STANDALONE È uno specificatore di stile per getDisplayName e getDisplayNames che indica un nome breve utilizzato in modo indipendente, ad esempio l'abbreviazione di un mese come intestazioni del calendario.
public static final int LONG_STANDALONE È uno specificatore di stile per getDisplayName e getDisplayNames che indica un nome lungo utilizzato in modo indipendente, ad esempio il nome di un mese come intestazioni del calendario.

Due nuovi metodi locali per gestire le estensioni (facoltative) di una locale.

Metodo Descrizione
hasExtensions booleane pubbliche() Restituisce true se questa locale ha estensioni.
stripExtensions locali pubbliche() Restituisce una copia di questa locale senza estensioni. Se questa lingua non ha estensioni, viene restituita essa stessa.

Due nuovi metodi Locale.filter restituiscono un elenco di istanze Locale che corrispondono ai criteri specificati, come definito nella RFC 4647:

Metodo Descrizione
filtro elenco statico pubblico (elenco priorità elenco, impostazioni locali della raccolta) Restituisce un elenco di istanze locali corrispondenti utilizzando il meccanismo di filtro definito in RFC 4647. Ciò equivale a filter(List, Collection, FilteringMode) quando la modalità è Locale.FilteringMode.AUTOSELECT_FILTERING.
filtro elenco statico pubblico (elenco priorità elenco, impostazioni locali della raccolta, modalità Locale.FilteringMode) Restituisce un elenco di istanze locali corrispondenti utilizzando il meccanismo di filtro definito in RFC 4647.

Due nuovi metodi Locale.filterTags restituiscono un elenco di tag di lingua che corrispondono ai criteri specificati, come definito nella RFC 4647.

Metodo Descrizione
elenco statico pubblico filterTags(Elenco prioritàLista, Tag raccolta) Restituisce un elenco di tag delle lingue corrispondenti utilizzando il meccanismo di filtro di base definito in RFC 4647. Ciò equivale a filterTags(List, Collection, FilteringMode) quando mode è Locale.FilteringMode.AUTOSELECT_FILTERING.
elenco statico pubblico filterTags (elenco priorità elenco, tag raccolta, modalità Locale.FilteringMode) Restituisce un elenco di tag delle lingue corrispondenti utilizzando il meccanismo di filtro di base definito nella RFC 4647.

Due nuovi metodi di ricerca restituiscono il tag locale o di lingua con la migliore corrispondenza utilizzando il meccanismo di ricerca definito nella RFC 4647.

Metodo Descrizione
ricerca locale statica pubblica (elenco priorità elenco, impostazioni locali della raccolta) Restituisce un'istanza Locale per il tag della lingua con la migliore corrispondenza utilizzando il meccanismo di ricerca definito in RFC 4647.
Ricerca di stringhe statiche pubbliche(Elenco prioritàElenco,Tag raccolta) Restituisce il tag della lingua con la migliore corrispondenza utilizzando il meccanismo di ricerca definito nella RFC 4647.

Altri miglioramenti della versione Java 8

Miglioramenti in JDK 8u5

1) La frequenza con cui vengono visualizzate le richieste di sicurezza per un'applicazione è stata ridotta.


Miglioramenti in JDK 8u11

1) Un'opzione per eliminare le offerte degli sponsor quando JRE viene installato o aggiornato è disponibile nella scheda Avanzate del Pannello di controllo Java.

2) L'attributo Entry-Point può essere incluso nel manifest del file JAR per identificare una o più classi come punto di ingresso valido per la tua RIA (Rich Internet application).


Miglioramenti in JDK 8u20

1) Lo strumento javafxpackager è stato rinominato javapackager. Questo strumento è stato migliorato con nuovi argomenti per bundle di applicazioni autonome.

I seguenti miglioramenti sono legati allo strumento Java:

  • È stata aggiunta un'opzione sperimentale del compilatore JIT relativa alla memoria transazionale limitata (RTM).
  • Sono state aggiunte diverse opzioni relative alla deduplicazione delle stringhe.
  • Sono state aggiunte diverse opzioni relative agli elementi intrinseci Advanced Encryption Standard (AES).
  • Le combinazioni di opzioni di Garbage Collection sono state deprecate.

2) La Guida all'ottimizzazione della Garbage Collection è stata aggiunta alla Java HotSpot Virtual Machine. Descrive i garbage collector inclusi con Java HotSpot VM e ti aiuta a decidere quale garbage collector può ottimizzare al meglio le prestazioni della tua applicazione, soprattutto se gestisce grandi quantità di dati (più gigabyte), ha molti thread e ha tassi di transazione elevati .


Miglioramenti in JDK 8u31

1) In questa versione, il protocollo SSLv3 viene rimosso dalle opzioni avanzate del Pannello di controllo Java.


Miglioramenti in JDK 8u40

Strumento Java

1) -XX:+CheckEndorsedAndExtDirs è stato aggiunto perché il meccanismo di override degli standard approvati (JDK-8065675) e il meccanismo di estensione (JDK-8065702) sono stati deprecati. L'opzione aiuta a identificare eventuali usi esistenti di questi meccanismi ed è supportata in JDK 7u80 e JDK 8u40.

2) Java Flight Recorder (JFR) offre una varietà di modi per sbloccare funzionalità commerciali e abilitare JFR durante il runtime di un'applicazione.

Include opzioni della riga di comando Java come comandi diagnostici jcmd e controlli GUI (Graphical User Interface) all'interno di Java Mission Control. Questa flessibilità consente di fornire le opzioni appropriate all'avvio o di interagire con JFR in un secondo momento.

3) L'opzione -XX:StartFlightRecording=parametro=valore ha un nuovo parametro, dumponexit=true, che specifica se un file dump di dati JFR deve essere generato quando la JVM termina in modo controllato.

4) Le opzioni relative alla Restricted Transactional Memory (RTM) non sono più sperimentali. Queste opzioni includono -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=number_of_retries, -XX:+UseRTMDeopt e -XX:+UseRTMLocking.

5) In Java 8 è stata introdotta l'Application Class Data Sharing (AppCDS). AppCDS estende CDS (Class Data Sharing) per consentire l'inserimento delle classi dalle directory delle estensioni standard e dal percorso delle classi dell'applicazione nell'archivio condiviso. Questa è una funzionalità commerciale e non è più considerata sperimentale.

6) Sono state aggiunte nuove opzioni -XX:+ResourceManagement e -XX:ResourceManagementSampleInterval=value.

7) Sono state aggiunte ulteriori informazioni sulle pagine di grandi dimensioni. Le pagine grandi, note anche come pagine enormi, sono pagine di memoria notevolmente più grandi della dimensione della pagina di memoria standard. Le pagine di grandi dimensioni ottimizzano i buffer Translation-Lookaside del processore. Le opzioni Linux -XX:+UseHugeTLBFS, -XX:+UseSHM e -XX:+UseTransparentHugePages sono state documentate.

8) L'opzione -XX:ObjectAlignmentInBytes=alignment è stata documentata.

Strumento JJS

1) È stata aggiunta l'opzione --optimistic-types=[true|false]. Abilita o disabilita presupposti di tipo ottimistico con la ricompilazione deottimizzazione.

2) L'opzione --lingual=[es5] è stata aggiunta allo strumento jjs. Specifica la versione del linguaggio ECMAScript.

Strumento di creazione pacchetti Java

1) Sono disponibili nuovi argomenti per i bundler di OS X. L'argomento mac.CFBundleVersion identifica il numero di versione interna da utilizzare.

altezza kat timpf

2) L'argomento mac.dmg.simple indica se i passaggi di personalizzazione DMG che dipendono dall'esecuzione del codice AppleScript vengono saltati.

Strumento Jcmd

Lo strumento Jcmd viene utilizzato per interagire dinamicamente con Java Flight Recorder (JFR). Puoi usarlo per sbloccare funzionalità commerciali, abilitare/avviare/interrompere le registrazioni dei voli e ottenere vari messaggi di stato dal sistema.

Strumento Jstat

Lo strumento jstat è stato aggiornato con informazioni sullo spazio di classe compresso che è una parte speciale del metaspazio.

Macchina virtuale

La funzionalità HotSpot VM Scalable Native Memory Tracking aiuta a diagnosticare le perdite di memoria della VM e chiarisce agli utenti quando le perdite di memoria non si verificano nella VM. Native Memory Tracker può essere eseguito senza spegnimento automatico su sistemi di grandi dimensioni e senza causare un impatto significativo sulle prestazioni oltre quanto considerato accettabile per i programmi di piccole dimensioni.