language games benchmarksgame benchmark alioth java performance comparison benchmarking versions

games - ¿Las mejoras de rendimiento de Java 6 se encuentran en JDK, JVM o ambas?



php vs python performance benchmark (4)

Es casi el 100% del tiempo de ejecución. Si bien es posible que algunos trucos de compilación básicos lo conviertan en el propio compilador de Java, no creo que haya ninguna mejora significativa entre Java 1.5 y 1.6.

Me he estado preguntando acerca de las mejoras de rendimiento promocionadas en Java SE 6: ¿está en el compilador o en el tiempo de ejecución? Dicho de otra manera, ¿una aplicación Java 5 compilada por JDK 6 vería una mejora en JSE 5 (lo que indica una mejor optimización del compilador)? ¿Vería una aplicación Java 5 compilada por JDK 5 una ejecución de mejora en JSE 6 (que indica una optimización mejorada del tiempo de ejecución)?

Me he dado cuenta de que compilar bajo JDK 6 lleva casi el doble de tiempo que en JDK 5 para la misma base de código; Espero que al menos parte de ese tiempo extra se gaste en optimizaciones del compilador, lo que con suerte conducirá a JAR y WAR más efectivos. La información JDK de Sun realmente no entra en detalles sobre las mejoras de rendimiento que han realizado, supongo que es un poco de la columna A, y un poco de la columna B, pero me pregunto cuál es la mayor influencia. ¿Alguien sabe de algún punto de referencia hecho en JDK 6 vs. JDK 5?



Se han producido muchas mejoras y optimizaciones en la nueva máquina virtual de Java. Por lo tanto, la parte principal verá un mejor rendimiento al ejecutar Java con la versión 6 jvm.

La compilación del código Java antiguo con Java 6 JDK probablemente arrojará un código más eficiente, pero las principales mejoras se encuentran en la máquina virtual, al menos eso es lo que he notado.


javac, que compila desde código fuente de Java a bytecodes, casi no realiza ninguna optimización. De hecho, la optimización a menudo hace que el código realmente se ejecute más lento al ser más difícil de analizar para una optimización posterior.

La única diferencia significativa entre el código generado para 1.5 y 1.6 es que con -objetivo 1.6 se agrega información adicional sobre el estado de la pila para hacer la verificación más fácil y más rápida (Java ME también lo hace). Esto solo afecta la velocidad de carga de la clase.

La parte de optimización real es el compilador de punto de acceso que compila bytecode a código nativo. Esto incluso se actualiza en algunas versiones de actualización. En Windows, solo la versión C1 del hotspot del cliente más lento se distribuye en el JRE de forma predeterminada. El punto de acceso del servidor C2 se ejecuta más rápido (use -server en la línea de comando java), pero es más lento de iniciar y usa más memoria.

También las bibliotecas y herramientas (incluyendo javac) a veces tienen un trabajo de optimización hecho.

No sé por qué está encontrando el JDK 6 más lento para compilar el código que el JDK 5. ¿Hay alguna diferencia sutil en la configuración?