Existem dois motivos básicos pelos quais o Java é mais rápido do que Go e C ++, e pode ser mais rápido do que C em muitos casos:
1) O compilador JIT. Ele pode incorporar chamadas de funções virtuais por meio de vários níveis, mesmo com classes OO, com base no perfil de tempo de execução. Isso não é possível em uma linguagem compilada estaticamente (embora a recompilação mais recente com base no perfil gravado possa ajudar). Isso é muito importante para a maioria dos benchmarks que envolvem algoritmos repetitivos.
2) O GC. A alocação de memória baseada em GC é quase gratuita, em comparação com o malloc. E a penalidade 'gratuita' pode ser amortizada durante todo o tempo de execução - frequentemente ignorada porque o programa termina antes que todo o lixo precise ser coletado.
Existem centenas (milhares?) De desenvolvedores extremamente talentosos tornando o GC / JVM eficiente. Pensar que você pode "codificar melhor do que todos eles" é uma loucura. É um problema de ego humano em seu cerne - os humanos têm dificuldade em aceitar que, com o treinamento adequado por humanos talentosos, o computador terá um desempenho melhor do que os humanos que o programaram.
Aliás, C ++ pode ser tão rápido quanto C se você não usar e dos recursos OO, mas então você está muito perto de apenas programar em C para começar.
Mais importante ainda, as "diferenças de velocidade" nesses testes geralmente não fazem sentido. Os custos de IO são ordens de magnitude mais do que as diferenças de desempenho e, portanto, projetos adequados que minimizam os custos de IO sempre vencem - mesmo em uma linguagem interpretada. Muito poucos sistemas são limitados pela CPU.
Como nota final, as pessoas se referem ao "jogo de benchmarks de linguagem de computador" como uma "medida científica". Os testes são completamente falhos, por exemplo, se você visualizar os testes Java para ninguém. Quando executo os testes no mesmo sistema operacional / hardware, obtenho cerca de 7,6 segundos para Java e 4,7 segundos para C - o que é razoável - não a lentidão 4x dos relatórios de teste. É uma isca de cliques, uma notícia falsa, projetada para gerar tráfego no site.
Como nota final, final ... Eu executei os testes usando Go e demorou 7,9 segundos. O fato de que quando você clica em Go, ele o compara a Java, e quando você clica em Java ele o compara a C, deve ser uma bandeira vermelha para qualquer engenheiro sério.
Para uma comparação do mundo real de Java, Go e C ++, consulte https://www.biorxiv.org/content/10.1101/558056v1 alerta de spoiler, Java sai por cima em desempenho bruto, com Go saindo por cima com uso de memória combinado e tempo de parede.