Hay dos razones básicas por las que Java es más rápido que Go y C ++, y puede ser más rápido que C en muchos casos:
1) El compilador JIT. Puede en línea llamadas a funciones virtuales a través de múltiples niveles, incluso con clases OO, según el perfil de tiempo de ejecución. Esto no es posible en un lenguaje compilado estáticamente (aunque la recopilación más reciente basada en el perfil grabado puede ayudar). Esto es muy importante para la mayoría de los puntos de referencia que involucran algoritmos repetitivos.
2) El GC. La asignación de memoria basada en GC es casi gratuita, en comparación con malloc. Y la penalización "gratuita" se puede amortizar durante todo el tiempo de ejecución; a menudo se omite porque el programa finaliza antes de que sea necesario recolectar toda la basura.
Hay cientos (¿miles?) De desarrolladores extremadamente talentosos que hacen que GC / JVM sea eficiente. Pensar que puede "codificar mejor que todos ellos" es una locura. Es un problema del ego humano en el fondo: los humanos tienen dificultades para aceptar que con el entrenamiento adecuado de humanos talentosos, la computadora funcionará mejor que los humanos que la programaron.
Por cierto, C ++ puede ser tan rápido como C si no usa y de las características de OO, pero entonces está bastante cerca de programar en C para empezar.
Más importante aún, las "diferencias de velocidad" en estas pruebas generalmente no tienen sentido. Los costos de IO son órdenes de magnitud más que las diferencias de rendimiento, por lo que los diseños adecuados que minimizan los costos de IO siempre ganan, incluso en un lenguaje interpretado. Muy pocos sistemas están vinculados a la CPU.
Como nota final, la gente se refiere al "juego de evaluaciones comparativas del lenguaje informático" como una "medida científica". Las pruebas son completamente defectuosas, por ejemplo, si ve las pruebas de Java para nbody. Cuando ejecuto las pruebas en el mismo sistema operativo / hardware, obtengo aproximadamente 7,6 segundos para Java y 4,7 segundos para C, lo cual es razonable, no la lentitud 4x que informan las pruebas. Es un cebo de clics, una noticia falsa, diseñada para generar tráfico en el sitio.
Como nota final, final ... Ejecuté las pruebas usando Go, y fueron 7,9 segundos. El hecho de que cuando haga clic en Ir, lo compare con Java, y cuando haga clic en Java lo compare con C, debería ser una señal de alerta para cualquier ingeniero serio.
Para una comparación del mundo real de Java, Go y C ++, consulte https://www.biorxiv.org/content/10.1101/558056v1 alerta de spoiler, Java se destaca en rendimiento bruto, con Go a la cabeza con uso combinado de memoria y tiempo de pared.