Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 102 di 134
  • livello avanzato
Indice lezioni

Performance

Il percorso che ha portato al miglioramento delle performance in Java
Il percorso che ha portato al miglioramento delle performance in Java
Link copiato negli appunti

Java, essendo un linguaggio di programmazione "virtuale", è sempre stato etichettato come un linguaggio a scarse performance. Anche da questo punto di vista, negli anni, il linguaggio si è trasformato portando migliorie da una versione all'altra, addirittura tra il 50 e il 75 percento. Tutto ciò è garantito proprio dall'ambiente di compilazione e di esecuzione del bytecode, con delle attività che elevano a uno stato di ottimo le performance di un software sviluppato con Java.

Riporto qui una slide presentata al Java Conference di Zurigo del Giugno 2007:

Figura 26.1. Miglioramenti velocità Java
Velocità Java

Come vediamo, la crescita nelle performance è lineare e sempre ben marcata (questa la slide della JRE server, ma quella desktop si discosta di poco). Fatta 100 la versione 1.3, la 1.6 arriva quasi a 350 di rendimento.

Ovviamente mai potrà attestarsi a livelli di un linguaggio a bassissimo livello ma, secondo alcune ricerche, ci sono delle similitudini a livello di performance che permettono di fare ottime esecuzioni (ovviamente non sceglieremo mai Java per sviluppare un software per applicazioni critiche real-time). Vediamo alcune delle attività nascoste del linguaggio Java che gli consentono di avere prestazioni eccellenti:

  • Compilazione Just In Time (JIT);
  • Hot Spot;
  • Garbage Collection.

Discutiamo di come si siano evolute queste attività nelle ultime versioni. Ovviamente si tratta di attività nascoste che il comune programmatore non si deve preoccupare di conoscere, ma che ci sollevano dall'effettuare alcuni compiti (come la gestione della memoria da parte del garbage collector) che necessiterebbero un livello di conoscenza più profondo della tecnologia.

Attraverso la compilazione Just In Time si effettua un lavoro di ottimizzazione per eseguire un pezzo di codice Java compilandolo in codice nativo solo al momento della reale necessità. Java effettua questo con un linguaggio intermedio (il famoso bytecode), il cui compito è quello di rendere più facile il passaggio verso il codice finale "nativo" sul sistema operativo di destinazione. Nelle ultime versioni di Java sono introdotte delle migliorie che decisamente migliorano in termini percentuali elevati grazie a tecniche "adattative" che danno vita al seguente strumento di Java: l'hot spot.

Java Hot Spot open() write() open() write()

Il Class Data Sharing

Il garbage collector

Dal punto di vista delle sostanziali modifiche, anche qui, le principali vennero fatte nella versione 1.5, con l'introduzione del concetto di "young generation" e "old generation". In realtà il concetto è un po' più complesso di quello che vado a spiegare ma il principio rimane valido. Quello che si è visto è che la maggior parte delle istanze di una classe sono temporanee, create, utilizzate e scartate, con un ciclo di vita abbastanza giovane. D'altra parte una piccola minoranza di istanze (circa il 10% secondo studi) ha un ciclo di vita maggiore, quasi quello dell'applicazione. Applicare gli stessi concetti di garbage collection è evidentemente una cosa inutile, in quanto quello che vale per oggetti dal ciclo di vita giovane, non vale per il ciclo di vita vecchio.

La Sun ha quindi introdotto una suddivisione tra "young generation old generation

Ti consigliamo anche