IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Comprendre les différences entre compilation statique et dynamique en Java
Un tutoriel de Abdelmajid Lali

Le , par Mickael Baron

53PARTAGES

4  0 
SOAT, société d'expertise et de conseil en informatique, et Matthieu Lefèvre, vous propose un tutoriel pour présenter les deux types de compilation statique et dynamique proposés par le langage Java.

Voici l'URL du tutoriel : http://soat.developpez.com/tutoriels...que-dynamique/

Si vous avez des commentaires, profitez de cette discussion

Merci d'avance

L'équipe Java

Retrouver les meilleurs cours et tutoriels pour apprendre Java : http://java.developpez.com/cours/

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de fearyourself
Expert éminent sénior https://www.developpez.com
Le 10/12/2016 à 6:27
Très bon article de vulgarisation pour les gens qui veulent connaître Hotspot

Détails:
Tired compilation -> Tiered
TiredCompilation -> Tiered
Figure 3 : Cycle de vie du -> il manque la fin "bytecode" d'après l'article de base
plus de détail) -> détails
Dead code Elimination -> Dead Code
StringBufffer -> StringBuffer
threadSafe -> ThreadSafe
elision -> Elision
garbage collector GC -> Garbage Collector (GC)
plus que de raison -> ne veut rien dire ... plus qu'il ne faille?
L'analyse de l'échappement -> Pas que je suis contre faire des traductions comme cela mais vous avez écrit "Escape Analysis" au début de la section... faut se décider: est-ce qu'on utilise les mots de la littérature et du monde de la compilation en anglais ou est-ce qu'on les rend français: Note je suis contre les écrire en français dans ce cas: le lecteur ne pourra pas trouver d'information supplémentaire dans ce cas...
static . -> espace inutile

Remarques pointilleuses:
Selon une publication d'Eva Andreasson, le gain est un code jusqu'à dix fois plus performant que celui produit par une compilation C0 -> Très discutable. Si on prend n'importe quel code, on peut avoir une optimisation infinie... dire 10x ici n'est qu'une phrase sans but en fait...

Cette partie est inutile:
Objets stockés dans des champs static .
Objets qui sont des attributs d'un autre objet lui-même sujet à l'échappement.
Objets créés, retournés ou non à la fin de l'exécution d'une méthode.
Objets créés à l'intérieur d'une boucle.

vous ne donnez pas assez de détail pour expliquer qu'en gros le compilateur doit prouver que l'objet est créé mais qu'on peut prouver sa mort et donc qu'on peut virer l'allocation sur le tas...

Troll possible:
Techniquement le code montré est incomplet: on ne sait pas ce qu'il se passe dans les appels de fonctions/constructeurs. Il est possible que le code fasse des choses complexes et donc le compilateur ne pourrait rien faire. Je suis pointilleux je sais mais si on suppose qu'on ne sait rien, on ne peut rien faire.

On peut en discuter longtemps:
"Dans ces conditions, et en s'appuyant sur les statistiques d'exécution, la JVM peut décider de ne pas vérifier quelle implémentation ou surcharge de la méthode il faut invoquer." -> non la JVM devra très souvent vérifier quelle implémentation il faut invoquer. La dévirtualisation ne se fait que dans certains cas et ce ne sera jamais parce que pendant l'interprétation ou l'exécution en C1 on ne voit pas de destinations multiples. Si on ne peut pas prouver que ce n'est pas virtuel, on aura un grand if avant l'appel qui sera d'un côté rapide et l'autre lent... En gros, cette explication est trompeuse.

Autre troll:
"C++... car ce dernier ne peut pas éliminer aussi facilement ce coût de vérification." -> oui car le C++ ne vient pas avec le tiered compilation et la JVM autour...

Dernier détail :
"par la compilation JIT" -> inlining peut être fait statiquement aussi. Il se trouve qu'en Java, ce n'est pas fait à cause de la virtualisation...

Encore une fois, super de voir cela sur developpez.com
Jc
0  0 
Avatar de fearyourself
Expert éminent sénior https://www.developpez.com
Le 19/12/2016 à 17:39
J'ai aussi remarqué l'autre jour que le lien en haut pour commentez sur l'article est le mauvais lien:

Il va vers:
http://www.developpez.net/forums/sho....php?t=1451851

->

http://www.developpez.net/forums/d14...mplacer-maven/
0  0 
Avatar de Mickael Baron
Rédacteur https://www.developpez.com
Le 19/12/2016 à 19:48
Salut,

Merci pour les commentaires.

Comme je ne suis pas auteur, j'ai corrigé la partie orthographique. J'ai demandé à l'auteur de venir répondre pour le reste.

Mickael
0  0 
Avatar de fearyourself
Expert éminent sénior https://www.developpez.com
Le 21/12/2016 à 16:29
Citation Envoyé par Mickael Baron Voir le message
Salut,

Merci pour les commentaires.

Comme je ne suis pas auteur, j'ai corrigé la partie orthographique. J'ai demandé à l'auteur de venir répondre pour le reste.

Mickael
Cool
0  0