¿Cuánto más rápido es Java 17?

Java 17 (lanzado ayer) viene con muchas características nuevas y mejoras. Sin embargo, la mayoría de ellos requieren cambios de código para beneficiarse. Excepto por el rendimiento. Simplemente cambie su instalación de JDK y obtendrá un aumento de rendimiento gratuito. ¿Pero cuanto? ¿Vale la pena? Averigüemos comparando los puntos de referencia de JDK 17, JDK 16 y JDK 11.

Metodología de referencia

  • Hardware: Una máquina estable sin otros procesos exigentes computacionales en ejecución y con 
    Intel® Xeon® Silver 4116 @ 2.1 GHz (12 cores total / 24 threads)
    128 GiB
    memoria RAM, corriendo 
    RHEL 8 x86_64
    .
  • JDK (utilizados para compilar y ejecutar):
    • JDK 11openjdk 11.0.12 2021-07-20 Entorno de tiempo de ejecución OpenJDK Temurin-11.0.12 + 7 (compilación 11.0.12 + 7) OpenJDK 64-Bit Server VM Temurin-11.0.12 + 7 (compilación 11.0.12 + 7, modo mixto)
    • JDK 16openjdk 16.0.2 2021-07-20 Entorno de tiempo de ejecución OpenJDK (compilación 16.0.2 + 7-67) VM de servidor OpenJDK de 64 bits (compilación 16.0.2 + 7-67, modo mixto, uso compartido)
    • JDK 17 (descargado 2021-09-06)openjdk 17 2021-09-14 Entorno de tiempo de ejecución OpenJDK (compilación 17 + 35-2724) VM de servidor OpenJDK de 64 bits (compilación 17 + 35-2724, modo mixto, uso compartido)
  • Opciones de JVM: 
    -Xmx3840M
    y especifique explícitamente un recolector de basura:
    • -XX:+UseG1GC
       para G1GC, el recolector de basura de baja latencia (el predeterminado en los tres JDK).
    • -XX:+UseParallelGC
       para ParallelGC, el recolector de basura de alto rendimiento.
  • Clase principal: 
    org.optaplanner.examples.app.GeneralOptaPlannerBenchmarkApp
     del módulo 
    optaplanner-examples
    en OptaPlanner 
    8.10.0.Final
    .
    • Cada ejecución resuelve 11 problemas de planificación con OptaPlanner, como la lista de empleados , los horarios escolares y la optimización de la nube . Cada problema de planificación dura 5 minutos. El registro está configurado en 
      INFO
      . El punto de referencia comienza con un calentamiento de JVM de 30 segundos que se descarta.
    • Resolver un problema de planificación no implica E / S (excepto unos pocos milisegundos durante el inicio para cargar la entrada). Una sola CPU está completamente saturada. Crea constantemente muchos objetos de corta duración y el GC los recopila posteriormente.
    • Los puntos de referencia miden el número de puntuaciones calculadas por segundo. Más alto es mejor. Calcular una puntuación para una solución de planificación propuesta no es trivial: implica muchos cálculos, incluida la verificación de conflictos entre cada entidad y todas las demás entidades.
  • Ejecuciones: cada combinación de JDK y recolector de basura se ejecuta 3 veces de forma secuencial. Los resultados a continuación son el promedio de esas 3 carreras.

Resultados

Java 11 (LTS) y Java 16 frente a Java 17 (LTS)

comparación java11 java16 java17 G1GC
PromedioEquilibrio de la nubeReasignación de máquinaProgramación de cursosProgramación de exámenesLista de enfermerasTorneo itinerante
Conjunto de datos200c800cB1B10c7c8s2s3m1mh1nl14
JDK 11103,60696,700274,10337,42111,77913,66014.3548,9823,5853.3355,019
JDK 16109,20397.567243,09638,03113,95016,25115,2189.5283.8173,5085.472
JDK 17106,14798,069245,64542,09614,40616,92415,6199,7263.8023.6015.618
11 → 178,66%2,45%1,42%-10,38%12,49%22,30%23,90%8,81%8,28%6,05%7,98%11,95%
16 → 172,41%-2,80%0,51%1,05%10,69%3,27%4,14%2,63%2,08%-0,39%2,65%2,67%
comparación java11 java16 java17 ParallelGC
PromedioEquilibrio de la nubeReasignación de máquinaProgramación de cursosProgramación de exámenesLista de enfermerasTorneo itinerante
Conjunto de datos200c800cB1B10c7c8s2s3m1mh1nl14
JDK 11128,553121,974292,76148,33913,39715,54016,3929,8874.4094.1486.097
JDK 16128,723123,314281,88245,62216,24318,52817,74210,7444.6084.3486.578
JDK 17130,215124,498262,75345,05816,47918,90418.02310,8454.6584.4306.641
11 → 176,54%1,29%2,07%-10,25%-6,79%23,00%21,64%9,95%9,68%5,63%6,80%8,92%
16 → 170,37%1,16%0,96%-6,79%-1,24%1,45%2,03%1,59%0,94%1,08%1,89%0,96%
NotaAl observar los datos sin procesar de las 3 ejecuciones individuales (no se muestran aquí), los números de reasignación de máquina (B1 y B10) fluctúan mucho entre las ejecuciones en el mismo JDK y GC. A menudo en más del 10%. Los otros números no sufren esta falta de fiabilidad.Podría decirse que es mejor ignorar los números de reasignación de máquina . Pero para evitar preocupaciones sobre los datos selectivos, estos resultados y promedios los incluyen.

G1GC frente a ParallelGC en Java 17

comparación G1GC ParallelGC java17
PromedioEquilibrio de la nubeReasignación de máquinaProgramación de cursosProgramación de exámenesLista de enfermeras .Torneo itinerante
Conjunto de datos200c800cB1B10c7c8s2s3m1mh1nl14
G1GC106,14798,069245,64542,09614,40616,92415,6199,7263.8023.6015.618
Paralelo GC130,215124,498262,75345,05816,47918,90418.02310,8454.6584.4306.641
G1 → Paralelo GC16,39%22,67%26,95%6,96%7,04%14,39%11,69%15,39%11,50%22,50%23,01%18,20%

Resumen ejecutivo

En promedio, para los casos de uso de OptaPlanner, estos puntos de referencia indican que:

  • Java 17 es un 8,66% más rápido que Java 11 y un 2,41% más rápido que Java 16 para G1GC (predeterminado).
  • Java 17 es un 6,54% más rápido que Java 11 y un 0,37% más rápido que Java 16 para ParallelGC.
  • El recolector de basura paralelo es un 16,39% más rápido que el recolector de basura G1.

No hay grandes sorpresas aquí: el último JDK es más rápido y el recolector de basura de alto rendimiento es más rápido que el recolector de basura de baja latencia.

Espera un minuto aquí …

Cuando comparamos JDK 15 , vimos que Java 15 era un 11,24% más rápido que Java 11. Ahora, la ganancia de Java 17 sobre Java 11 es menor. ¿Eso significa que Java 17 es más lento que Java 15?

Bueno no. Java 17 también es más rápido que Java 15. Esos puntos de referencia anteriores se ejecutaron en una base de código diferente (OptaPlanner 7.44 en lugar de 8.10). No compare manzanas y naranjas.

Extraído de: