News

Java 11 vs Java 8

Java 11 è più veloce di Java 8?

Un test è stato eseguito con OptaPlanner per confrontare due versioni di Java, Java 11  e Java 8.

Come promemoria, Java 8 è stato reso disponibile a marzo 2014 e ha introdotto molte funzionalità. Consisteva di oltre 56 funzioni aggiunte, tra cui l’arrivo di espressioni lambda, metodi predefiniti, interfacce funzionali e Stream che modificano profondamente il linguaggio e quindi l’intero ecosistema Java. C’era anche l’incorporazione di una nuova API per la gestione delle date, nuove annotazioni e un nuovo motore di esecuzione JavaScript. Molti utenti di Internet hanno scoperto che questi importanti cambiamenti in Java 8 sono davvero impressionanti. Dissero che questa versione del linguaggio si stava evolvendo lentamente per il suo tempo, ma in modo efficiente. Inoltre, hanno trovato, espressioni lambda piacevoli da usare.

Per quanto riguarda Java 11 , è apparso nel settembre 2018. Java 11 è stato un aggiornamento importante, poiché era la prima versione LTS (con supporto a lungo termine) da quando Oracle ha deciso di rilasciare due versioni di Java all’anno. Era quindi destinato agli utenti che preferiscono la stabilità per accedere rapidamente alle nuove funzionalità. In Java 11 viene introdotta una nuova API HTTP. In effetti, non è completamente nuovo, dal momento che è stato introdotto nel JDK 9 (in incubazione) e aggiornato nel JDK 10. L’API HTTP è stata standardizzata in Java 11. Nel framework da questo lavoro, l’API precedentemente incubata, che si trovava nel pacchetto jdk.incubator.http, è stata rimossa.

Per eseguire questi test, dice, hanno usato:

  • una macchina stabile senza altri processi di elaborazione in esecuzione, con 2 CPU Intel® Xeon® E5-2609 0 @ 2,4 GHz (8 core totali) e 31,3 GB RAM, con RHEL 6.
  • Le versioni di G1 e Parallel GC Garbage Collector di entrambe le versioni Java possono essere utilizzate per confrontare l’impatto della garbage collection. Java viene eseguito con i parametri -Xmx1536M -server -XX: + UseG1GC e -Xmx1536M -server -XX: + UseParallelGC rispettivamente;
  • Oracle Java 8: la versione java “1.8.0_191”; un ambiente runtime Java SE (versione 1.8.0_191-b12); una macchina virtuale Java HotSpot (TM) a 64 bit (versione 25.191-b12, modalità mista);
  • e OpenJDK 11: versione openjdk “11.0.1” 2018-10-16; OpenJDK Runtime Environment 18.9 (versione 11.0.1 + 13); OpenJDK 64-Server VM 18.9 (versione 11.0.1 + 13, modalità mista);

La versione di OptaPlanner utilizzata è la versione 7.14.0. le indicazioni fornite sono:

  • risolvere un problema di scheduling non comporta alcun input / output (eccetto alcuni millisecondi all’avvio per caricare l’input);
  • solo un processore è completamente saturo. Crea costantemente molti oggetti effimeri che il GC poi colleziona. Ogni corsa risolve 11 problemi di programmazione con OptaPlanner;
  • Ogni problema di pianificazione dura 5 minuti e inizia con un preriscaldamento della JVM di 30 secondi, che viene ignorata;
  • i benchmark misurano il numero di punteggi calcolati per millisecondo. Il calcolo di un punteggio per una soluzione di pianificazione proposta non è banale: coinvolge molti calcoli, compresa la ricerca di conflitti tra ciascuna entità e tutte le altre entità.
  • I risultati di confronto tra Java 11 e Java 8 utilizzando il garbage collector G1 mostrano che quasi tutti i set di dati migliorano Java 11 su Java 8 utilizzando il garbage collector G1. In media, il passaggio a Java 11 rappresenta un miglioramento del 16%. Una possibile spiegazione di questo miglioramento potrebbe essere il JEP 307 Parallel Full GC per G1 introdotto in Java 10 per migliorare le peggiori latenze del collector G1. Uno dei principali vantaggi di G1 è la sua capacità di compattare lo spazio di memoria libero senza lunghi tempi di interruzione. Può anche rimuovere gli heap inutilizzati.
  • Un altro confronto effettuato è tra il GC parallelo e G1 solo su Java 11. Quest’ultimo fornisce quanto segue: Sebbene G1 mostri un netto miglioramento rispetto a Java 8, la strategia G1 per OptaPlanner è meno vantaggiosa per il GC parallelo rispetto alla maggior parte dei set di dati. L’unica eccezione è la riassegnazione della macchina, che mostra che OptaPlanner G1 è in grado di calcolare più velocemente. Il GC parallelo è un GC high-throughput utilizzato di default in JDK8. Allo stesso tempo, questo non è adatto per la riduzione della memoria, il che lo rende inadatto per il ridimensionamento verticale flessibile. Quindi, secondo i test, Java 11 sembra più veloce con il suo modo di gestire la memoria.

Scopri tutti i nostri corsi Java