Domanda

Mi sono interrogato sui miglioramenti delle prestazioni pubblicizzati in Java SE 6: è nel compilatore o nel runtime?In altre parole, un'applicazione Java 5 compilata da JDK 6 vedrebbe un miglioramento eseguito con JSE 5 (indicando una migliore ottimizzazione del compilatore)?Un'applicazione Java 5 compilata da JDK 5 vedrebbe un miglioramento eseguito con JSE 6 (indicando una migliore ottimizzazione del runtime)?

Ho notato che la compilazione con JDK 6 richiede quasi il doppio del tempo rispetto a JDK 5 per la stessa identica base di codice;Spero che almeno una parte di quel tempo extra venga dedicato all'ottimizzazione del compilatore, auspicabilmente portando a JAR e WAR più performanti.Le informazioni JDK di Sun non entrano nei dettagli sui miglioramenti delle prestazioni apportati: presumo che provengano un po' dalla colonna A e un po' dalla colonna B, ma mi chiedo quale sia l'influenza maggiore.Qualcuno sa di eventuali benchmark effettuati su JDK 6 vs.JDK5?

È stato utile?

Soluzione

Non ho sentito parlare di miglioramenti nel compilatore, ma sono state pubblicate ampie informazioni sui miglioramenti delle prestazioni di runtime.

Guida alla migrazione:

[http://java.sun.com/javase/6/webnotes/adoption/adoptionguide.html]

Libro bianco sulle prestazioni:

[http://java.sun.com/performance/reference/whitepapers/6_performance.html]

Altri suggerimenti

javac, che compila dal sorgente Java ai bytecode, non esegue quasi alcuna ottimizzazione.In effetti, l'ottimizzazione spesso renderebbe il codice effettivamente più lento perché più difficile da analizzare per una successiva ottimizzazione.

L'unica differenza significativa tra il codice generato per 1.5 e 1.6 è che con -target 1.6 vengono aggiunte informazioni aggiuntive sullo stato dello stack per rendere la verifica più semplice e veloce (anche Java ME fa questo).Ciò influisce solo sulla velocità di caricamento della classe.

La vera parte di ottimizzazione è il compilatore hotspot che compila il bytecode in codice nativo.Questo è anche aggiornato su alcune versioni di aggiornamento.Su Windows solo la versione client C1 più lenta dell'hotspot è distribuita in JRE per impostazione predefinita.L'hotspot del server C2 viene eseguito più velocemente (utilizzare -server sulla riga di comando Java), ma è più lento nell'avvio e utilizza più memoria.

Anche le librerie e gli strumenti (incluso javac) a volte hanno un lavoro di ottimizzazione.

Non so perché trovi JDK 6 più lento nella compilazione del codice rispetto a JDK 5.C'è qualche sottile differenza nella configurazione?

La sua autonomia è quasi al 100%.Sebbene sia possibile inserire alcuni trucchi di compilazione di base nel compilatore Java stesso, non credo che ci siano miglioramenti significativi tra Java 1.5 e 1.6.

Sono stati apportati molti nuovi miglioramenti e ottimizzazioni nella nuova macchina virtuale Java.Quindi la parte principale che vedrai migliorare le prestazioni è durante l'esecuzione di Java con la versione 6 jvm.

Compilare il vecchio codice Java utilizzando Java 6 JDK produrrà probabilmente un codice più efficiente, ma i miglioramenti principali risiedono nella macchina virtuale, almeno questo è quello che ho notato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top