2012-04-26 13 views

Respuesta

9

Sí, porque la mayoría de las optimizaciones se realizan en tiempo de ejecución por la JVM, el compilador está haciendo muy poco en lo que respecta a la optimización. Por lo tanto, el código compilado con el antiguo compilador de Java aún se beneficiará de la nueva JVM.

Sin embargo, hay algunas optimizaciones realizadas en tiempo de compilación, como reemplazar concatenaciones String consecutivas con StringBuilder.

+0

Hola Tomasz, gracias por la respuesta. ¿Tiene algún indicador de materiales de lectura que indique lo anterior? Algo oficial de Sun u Oracle sería muy bueno. – bungrudi

+0

@bungrudi: desafortunadamente, es solo un conocimiento común de SO. ¿Pero tal vez alguien más señalará recursos duros? –

+0

+1 No solo el compilador 'javac' hace muy pocas optimizaciones, lo que hace no ha cambiado mucho desde Java 1.4. Usando StringBuilder en vez de StringBuffer se agregó en Java 5.0 (2004) pero la diferencia suele ser muy pequeña. –

1

Casi todas las optimizaciones en java se producen en el jit y, por lo tanto, solo dependen de la versión jvm que ejecuta la aplicación. El compilador bytecode de javac solo emite los bytecodes más sencillos posibles. No creo que haya optimizaciones en esta etapa, excepto tal vez para la concatenación de cadenas usando StringBuilder/StringBuffer.

Java 6 y superior pueden usar un bytecode verifier más rápido y simple para las clases compiladas con la versión de destino 6. El compilador javac crea información adicional sobre los tipos de datos en cada ranura de pila, que el verificador debe validar. En versiones anteriores, el verificador tenía que deducir estos tipos, que es más complejo. Este cambio solo acelerará la carga de clases y no tendrá ningún impacto cuando se ejecute realmente el bytecode.

Creo que otro cambio en el bytecode en la versión 5 o 6 fue que el conjunto constante en el archivo de clase puede hacer referencia a clases e interfaces. De nuevo, esto probablemente solo afecte la carga de clase.

0

No solo habrá grandes ganancias de rendimiento, sino que incluso entre las versiones de Java 6 hay grandes diferencias. Seguí versiones menores de Java 6 durante un período de 18 meses y vi un 15-20% de aceleración solo por eso.

Java 7 está fuera, dicho sea de paso, y es la versión de producción preferida. ¿Hay alguna razón por la que no desee acceder a esa versión?

Ah, y una última cosa. Si necesita demostrar las ganancias a la administración, entonces debe leer mucho sobre la medición del rendimiento de las aplicaciones Java. Tengo un artículo en la edición de mayo/junio de 2012 de la revista Java de Oracle, que es un verdadero 101 si lo necesitas. Es un tema muy resbaladizo, por lo que deberías leer mucho o puedes obtener números muy engañosos.

+0

La aplicación es una aplicación heredada de WebSphere 6 (basada en Java 1.4) que ahora estamos migrando a WebSphere 7. El JDK 'incluido' es un 1.6.0_xx y no tenemos el lujo del tiempo libre para tratar de cambiarlo a Java 7 (al menos por ahora). Espero ansiosa su artículo. – bungrudi

2

Como Tomasz Nurkiewicz señala que la mayor parte de la optimización es realizada por el compilador JIT y debería ver los beneficios de rendimiento ejecutando en java 6 en lugar de java 1.4. Sin embargo, esto no garantiza que extraerá los mejores resultados. Aún puede perder beneficios si usa variantes de estructuras de datos más lentas (más antiguas). p.ej. StringBuffer en lugar de StringBuilder, Vector en lugar de LinkedList, Hashtable en lugar de HashMap, y así sucesivamente ...

También puede considerar compilar con el distintivo -deprecated para javac. Es probable que desee reemplazar los métodos en desuso, ya que generalmente significa que hay una alternativa de mejor rendimiento disponible para lograr lo mismo.

+0

buen puntero en el indicador -deprecated. +1 por esto. – bungrudi

Cuestiones relacionadas