2010-11-18 21 views
10

Tengo un perfil de Maven para un proyecto de Java que se activa al realizar una construcción final en un servidor de Hudson CI.Optimización del compilador de Java durante una compilación Maven?

Actualmente, sólo la personalización de este perfil es el plugin de Maven compilador de la siguiente manera:

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

¿Hay otros ajustes u optimizaciones para el compilador Java que una versión final debe hacer para maximizar el rendimiento?

Respuesta

17

Suponiendo que se está ejecutando en el Sun (Hotspot) JVM, toda la optimización ocurre en la JVM.

Por lo que especificar <optimize>true</optimize> no hace nada.

Y especificando <debug>false</debug> simplemente elimina los símbolos de depuración. Lo cual disminuirá ligeramente el tamaño de tu archivo JAR, pero hará que sea mucho más difícil rastrear los problemas de producción, ya que no tendrás números de línea en tus seguimientos de pila.


Una cosa que me gustaría es especificar la configuración de compatibilidad de JVM:

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

¿Está diciendo que dejar los símbolos de depuración no perjudica el rendimiento? Lo hará en la configuración v1.6. – HDave

+3

@HDave - la información de depuración se almacena en LineNumberTable y LocalVariableTable en el archivo .class (ver http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html). Si bien esto puede consumir memoria adicional, es independiente del bytecode y, por lo tanto, no afecta directamente el rendimiento de la ejecución. – Anon

+0

Es bueno saber ... gracias. – HDave

11

Ni siquiera debería hacer eso: la optimización en javac se ha desactivado durante bastante tiempo, IIRC. Básicamente, el JIT es responsable de casi toda la optimización, y las optimizaciones de javac en realidad duelen que en algunos casos.

Si usted está buscando para ajustar el rendimiento que debe buscar en otra parte:

  • Su código real
  • VM opciones (por ejemplo la sintonización GC)
+0

No recomendaría la optimización a menos que el rendimiento sea un problema, especialmente porque el JIT realmente es muy bueno. – extraneon

+0

@extraneon: Te has perdido mi punto: la optimización activamente * lastima * el rendimiento, por lo que básicamente se eliminó. –

+0

En realidad, me refiero a la optimización de códigos y la optimización de GC. La optimización de código puede dar como resultado un código menos legible, y las opciones de GC pueden sorprender a los no informados. – extraneon

1

Para nuestra construcción basada experto No consumo <debug>false</debug> vez que estoy definiendo las opciones de depuración con <debuglevel/> que permite una control mucho más fino {ver la opción javac -g}.

+0

Probé esto y tengo una pregunta de seguimiento sobre esto: http://stackoverflow.com/questions/4220083/ setting-maven-java-compiler-debug-to-false-does-not-remove-line-number-table – HDave

Cuestiones relacionadas