2010-11-18 29 views
10

J'ai un profil Maven pour un projet Java qui est activé lors d'une construction finale sur un serveur Hudson CI.Optimisation du compilateur Java lors d'une génération Maven?

Actuellement, seule la personnalisation de ce profil est le plug-in du compilateur Maven comme suit:

   <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
         <debug>false</debug> 
         <optimize>true</optimize> 
        </configuration> 
       </plugin> 

Existe-t-il d'autres réglages ou des optimisations au compilateur Java qu'une version finale devrait faire pour optimiser les performances?

Répondre

17

En supposant que vous êtes en cours d'exécution sur le JVM Sun (Hotspot), toute l'optimisation se produit dans la JVM.

La spécification de <optimize>true</optimize> ne fait rien. Et en spécifiant <debug>false</debug> supprime simplement les symboles de débogage. Ce qui diminuera légèrement la taille de votre JARfile, mais rendra beaucoup plus difficile le suivi des problèmes de production, car vous n'aurez pas de numéros de ligne dans les traces de votre pile.


Une chose que je voudrais spécifier est des paramètres de compatibilité JVM:

<source>1.6</source> 
<target>1.6</target> 
+0

Etes-vous en train de dire que laisser les symboles de débogage dedans ne blesse pas les performances? Fera sur les paramètres de la version 1.6. – HDave

+3

@HDave - les informations de débogage sont stockées dans LineNumberTable et LocalVariableTable dans le fichier .class (voir http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html). Bien que cela puisse consommer de la mémoire supplémentaire, il est distinct du bytecode et n'affecte donc pas directement les performances d'exécution. – Anon

+0

Bon à savoir ... merci. – HDave

11

Vous ne devriez même pas faire cela - optimisation dans javac a été désactivé pendant un certain temps, IIRC. Fondamentalement, le JIT est responsable de la quasi-totalité de l'optimisation, et les optimisations javac effectivement blessent que dans certains cas.

Si vous cherchez à optimiser les performances, vous devriez chercher ailleurs:

  • Votre code réel
  • Options VM (par exemple le réglage GC)
+0

Je ne recommanderais pas d'optimiser à moins que la performance est un problème, d'autant plus que le JIT est vraiment très bon. – extraneon

+0

@extraneon: Vous avez manqué mon point - optimisation activement * mal * performance, donc fondamentalement, il a été retiré. –

+0

En fait, je voulais dire l'optimisation du code et l'optimisation du CPG. L'optimisation du code peut entraîner un code moins lisible, et les options du CPG peuvent surprendre les personnes non averties. – extraneon

1

Pour notre construction à base de maven Je ne me place <debug>false</debug> je définir les options de débogage avec <debuglevel/> qui permet à un un contrôle beaucoup plus fin {voir l'option javac -g}.

+0

J'ai essayé cela et ai une question de suivi à ce sujet: http://stackoverflow.com/questions/4220083/ set-maven-java-compiler-debug-à-faux-ne-pas-supprimer-ligne-numéro-table – HDave