2016-04-24 2 views
1

Je me demande si les constructions comme celle-ci:JIT compilation

for (Suits suit : Suits.values()) { 
     // do stuff 
} 

seront immédiatement compilé dans ce:

 Suits[] suits = Suits.values(); 
     for (Suits suit : suits) { 
      // do stuff 
     } 

Je ne comprends qu'ils seront compilés en deuxième variante après certains cercles , mais cela arriverait-il au premier cercle?

Répondre

2

La première étape de compilation est le compilateur javac. Vous devriez noter que lorsque la construction for-each a été ajoutée comme syntaxique, aucune modification du code octet sous-jacent n'était nécessaire et ceux-ci compileraient fondamentalement la même chose.

Cela prend beaucoup de temps avant que le JIT n'optimise le code.

Remarque: Si vous êtes préoccupé par les performances, la dernière chose que vous voulez faire est d'appeler Enum.values() car cela crée un nouveau tableau à chaque fois (et beaucoup de déchets en conséquence). Je vous suggère de mettre en cache ce tableau quelque part, il ne sera pas modifié.