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.
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
@bungrudi: desafortunadamente, es solo un conocimiento común de SO. ¿Pero tal vez alguien más señalará recursos duros? –
+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. –