Synchronized es 5 veces más lento en Java 8 que en Java 7
Parece que el rendimiento de Java 8 en algunos aspectos está siendo una de cal y una de arena. Hace un par de días os traíamos una noticia diciendo que según un benchmark el rendimiento de Fork-Join en Java 8 era mejor que en Java 7. Hoy os traemos otra no tan positiva.
Según este benchmark, el uso de synchronized es 5 veces más lento en Java 8 que en Java 7. En este blog han hecho diversas pruebas de varias primitivas empleadas para sincronización, y el uso de la palabra reservada synchronized no ha salido bien parado. Este gráfico muestra el tiempo en milisegundos de tres primitivas diferentes de sincronización en Java 7, mostrando en amarillo el uso de synchronized:
Éste es el mismo benchmark ejecutado en Java 8:
Como podéis ver, synchronized tarda casi cinco veces más en ejecutarse, si bien el uso de Atomic y locks parece ser prácticamente el mismo. Un factor de cinco es una reducción de rendimiento bastante importante; quizás esto se deba a un fallo por parte de Oracle y en una Update cercana corrijan esta regresión de código. Porque si no es una regresión, no me explico que lo puede haber causado.
Reader Comments (1)
El comentario de Aleksey Shipilev:March 31, 2014 at 10:26 AM en ese blog, así como la respuesta del autor, pueden explicar algunas cosas.