2008-09-18 19 views
3

Je me suis posé des questions sur les améliorations de performances présentées dans Java SE 6 - est-ce dans le compilateur ou dans l'environnement d'exécution? En d'autres termes, une application Java 5 compilée par JDK 6 verrait-elle une amélioration sous JSE 5 (indiquant une amélioration de l'optimisation du compilateur)? Une application Java 5 compilée par JDK 5 verrait-elle une amélioration sous JSE 6 (indiquant une amélioration de l'optimisation de l'exécution)? J'ai remarqué que la compilation sous JDK 6 prend presque deux fois plus de temps que sous JDK 5 pour la même base de code; J'espère qu'au moins une partie de ce temps supplémentaire sera consacré à l'optimisation des compilateurs, ce qui, espérons-le, débouchera sur des JAR et des WAR plus performants. Les informations JDK de Sun ne vont pas vraiment dans les détails sur les améliorations de performance qu'ils ont faites - je suppose que c'est un peu de la colonne A, et un peu de la colonne B, mais je me demande quelle est la plus grande influence. Est-ce que quelqu'un sait des repères effectués sur JDK 6 vs JDK 5?Les améliorations de performances de Java 6 dans le JDK, la JVM ou les deux?

Répondre

1

Son presque 100% le temps d'exécution. Bien qu'il soit possible que certaines astuces de compilation de base soient incluses dans le compilateur Java lui-même, je ne crois pas qu'il y ait d'améliorations significatives entre Java 1.5 et 1.6.

1

Il y a eu beaucoup de nouvelles améliorations et d'optimisation dans la nouvelle machine virtuelle Java. Donc, la partie principale, vous verrez des performances améliorées est en cours d'exécution de Java avec la version 6 jvm.

La compilation d'un ancien code Java à l'aide du Java 6 JDK donnera probablement un code plus efficace, mais les améliorations principales résident dans la machine virtuelle, du moins c'est ce que j'ai remarqué.

7

javac, qui compile de la source Java bytecode, ne fait presque pas d'optimisation. En effet, l'optimisation rend souvent le code plus lent en étant plus difficile à analyser pour une optimisation ultérieure. La seule différence significative entre le code généré pour 1.5 et 1.6 est qu'avec -target 1.6 des informations supplémentaires sont ajoutées sur l'état de la pile pour rendre la vérification plus facile et plus rapide (Java ME le fait aussi). Cela n'affecte que les vitesses de chargement de classe.

La partie d'optimisation réelle est le compilateur de point d'accès qui compile le bytecode en code natif. Ceci est même mis à jour sur certaines versions de mise à jour. Sous Windows, seule la version C1 du point d'accès client la plus lente est distribuée dans le JRE par défaut. Le serveur hotspot C2 s'exécute plus rapidement (utilisez -server sur la ligne de commande java), mais il est plus lent à démarrer et utilise plus de mémoire.

De plus, les bibliothèques et les outils (y compris javac) ont parfois un travail d'optimisation. Je ne sais pas pourquoi vous trouvez JDK 6 plus lent à compiler le code que JDK 5. Y at-il une différence subtile dans la configuration?