2010-10-09 3 views

Répondre

11

Oui, et vous pouvez même le vérifier par vous-même. Prenez un petit fichier Java, par exemple:

public class Main { 
    public Main() { 
    int i = 10 + 20; 
    } 
} 

Compile avec javac Main.java, puis exécutez javap -c Main de le démonter:

Compiled from "Main.java" 
public class Main extends java.lang.Object{ 
public Main(); 
    Code: 
    0: aload_0 
    1: invokespecial #1; //Method java/lang/Object."<init>":()V 
    4: bipush 30 
    6: istore_1 
    7: return 

} 

Il est clair que dans le bytecode, vous pouvez voir l'optimisation du compilateur: bipush 30!

6

Oui. Cette optimisation du compilateur est appelée constant folding. Il y a une autre optimisation de compilateur appelée sparse conditional constant propagation qui fait quelque chose de similaire.

En général, il n'y a aucune garantie qu'un compilateur donné va réellement replier les constantes, mais de nos jours, à peu près tous les compilateurs pour chaque langage le font. En particulier, le Java Language Specification exige que les expressions constantes soient évaluées au moment de la compilation.

4

Oui, il sera simplifié as required by the JLS (merci à @EJP pour cette précision).

Si vous voulez plus de ressources et d'optimisation javac, jetez un oeil à Compiler optimizations ou Java Compilers.

Une autre chose intéressante est que même si votre code est optimisé lors de la compilation, une deuxième optimisation sera effectuée pendant l'exécution avec hotspot.


Ressources:

Sur le même sujet:

+1

Vous pouvez compter sur le compilateur Java évaluant les expressions constantes. Il est requis par la spécification, de sorte que, par exemple, les étiquettes de cas qui sont des CE peuvent être légales. – EJP

+0

@EJP, je ne suis pas sûr à 100% à ce sujet donc je vais changer ma réponse, mais pouvez-vous fournir un lien vers la spécification sur cette optimisation particulière? –

+3

Le fait que les CE soient autorisés dans les expressions de cas le rend obligatoire. Voir 15.28 Expressions constantes. – EJP

Questions connexes