Question

Je me posais des questions sur les améliorations de performances annoncées dans Java SE 6 - est-ce dans le compilateur ou dans le moteur d'exécution? En d'autres termes, une application Java 5 compilée par JDK 6 bénéficierait-elle d'une amélioration sous JSE 5 (indiquant une optimisation améliorée du compilateur)? Est-ce qu'une application Java 5 compilée par JDK 5 verrait une amélioration s'exécuter sous JSE 6 (indiquant une optimisation d'exécution améliorée)?

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 est consacré aux optimisations du compilateur, ce qui devrait permettre de générer des fichiers JAR et WAR plus performants. Les informations sur le JDK de Sun n'entrent pas vraiment dans les améliorations de performances qu'ils ont apportées. Je suppose qu'elles proviennent un peu de la colonne A et de la colonne B, mais je me demande quelle est l'influence la plus forte. Est-ce que quelqu'un connaît des points de repère effectués sur JDK 6 par rapport à JDK 5?

Était-ce utile?

La solution

Je n'ai pas entendu parler d'améliorations apportées au compilateur, mais des informations détaillées ont été publiées sur les améliorations des performances d'exécution.

Guide de migration:

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

Livre blanc sur les performances:

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

Autres conseils

javac, qui compile à partir de sources Java en bytecodes, n’effectue pratiquement aucune optimisation. En fait, l’optimisation ralentirait souvent l’exécution du code car il serait plus difficile de l’analyser pour une optimisation ultérieure.

La seule différence significative entre le code généré pour 1.5 et 1.6 réside dans le fait que, avec -target 1.6, des informations supplémentaires sont ajoutées sur l'état de la pile pour faciliter et accélérer la vérification (Java ME le fait également). Ceci n’affecte que les vitesses de chargement des classes.

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

De même, les bibliothèques et les outils (y compris javac) sont parfois optimisés.

Je ne sais pas pourquoi vous trouvez JDK 6 plus lent à compiler le code que JDK 5. Y a-t-il une différence subtile dans la configuration?

C'est presque 100% le temps d'exécution. Il est possible que certaines astuces de compilation de base soient intégrées au compilateur Java lui-même, mais je ne pense pas qu'il y ait eu d'amélioration significative entre Java 1.5 et 1.6.

De nombreuses améliorations et optimisations ont été apportées à la nouvelle machine virtuelle java. Vous constaterez donc une amélioration des performances lors de l'exécution de Java avec la version 6 JVM.

La compilation de l'ancien code java à l'aide du JDK Java 6 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é.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top