Em termos de design de linguagem, não há realmente nada que deva tornar o Go mais lento que o Java em geral. De fato, ele oferece mais controle do layout da memória de suas estruturas de dados; portanto, para muitas tarefas comuns, deve ser um pouco mais rápido. No entanto, o compilador primário Go atual, o planejador, o coletor de lixo, a biblioteca regexp e muitas outras coisas não são particularmente otimizados. Isso está melhorando constantemente, mas o foco parece ser útil, simples e rápido o suficiente para vencer as marcas de micropigmentação.
No benchmark vinculado, o Go perde muito para Java na árvore binária e no teste regexp. Esses são testes do sistema de gerenciamento de memória e da biblioteca regexp, respectivamente. O gerenciamento de memória da Go pode ser mais rápido e certamente melhorará com o tempo, e a atual biblioteca regexp padrão é um espaço reservado para uma implementação muito melhor que está por vir. Portanto, perder para os dois não é surpreendente, e em um futuro próximo a margem deve ser mais estreita.
Para o benchmark k-nucleotide, é um pouco difícil comparar, porque o código Java parece estar usando um algoritmo diferente. O código Go certamente se beneficiará das melhorias do compilador, agendador e alocador, mesmo que escritas, mas alguém teria que reescrever o código Go para fazer algo mais inteligente se quiséssemos comparar com mais precisão.
O Java vence no benchmark mandelbrot porque é tudo aritmético e loops de ponto flutuante, e este é um ótimo lugar para a JVM gerar código de máquina realmente bom e elevar coisas em tempo de execução. O Go, em comparação, possui um compilador bastante simples que não eleva, desenrola ou gera código de máquina realmente rígido atualmente, portanto, não é de surpreender que perca. No entanto, deve-se ter em mente que o tempo do Java não conta o tempo de inicialização da JVM ou as várias vezes em que ele precisa ser executado para que a JVM o faça corretamente. Para programas de longa duração, isso não é relevante, mas é importante em alguns casos.
Quanto ao restante dos benchmarks, Java e Go são basicamente de pescoço para pescoço, com Go consumindo significativamente menos memória e, na maioria dos casos, menos código. Portanto, embora o Go seja mais lento que o Java em vários desses testes, o Java é muito rápido, o Go se sai muito bem em comparação e o Go provavelmente ficará notavelmente mais rápido no futuro próximo.
Estou ansioso para quando o gccgo (um compilador Go que usa o código gcc) está maduro; isso deve deixar o Go praticamente alinhado com C para muitos tipos de código, o que será interessante.