En termes de conception de langage, rien ne devrait vraiment rendre Go plus lent que Java en général. En fait, cela vous donne plus de contrôle sur la structure de la mémoire de vos structures de données. Ainsi, pour beaucoup de tâches courantes, cela devrait être un peu plus rapide. Cependant, le compilateur principal actuel, le planificateur, le ramasse-miettes, la bibliothèque regexp et bien d’autres choses ne sont pas particulièrement optimisés. Cela ne cesse de s'améliorer, mais il semble que l'accent soit mis sur l'utilité, la simplicité et la rapidité avec laquelle il est préférable de gagner des microbonds.
Dans le repère lié, Go perd gros en Java sur l’arbre binaire et le test de l’expression rationnelle. Ce sont des tests du système de gestion de la mémoire et de la bibliothèque regexp, respectivement. La gestion de la mémoire de Go pourrait être plus rapide et s'améliorera certainement avec le temps, et la bibliothèque de regexp standard actuelle est un paramètre fictif pour une mise en œuvre bien meilleure, à venir. Donc, perdre sur ces deux n'est pas surprenant, et dans un proche avenir, la marge devrait être plus étroite.
Pour le point de repère k-nucléotide, il est un peu difficile de comparer car le code Java semble utiliser un algorithme différent. Le code Go bénéficiera certainement des améliorations du compilateur, du planificateur et de l'allocateur à venir, même sous sa forme écrite, mais il faudrait que quelqu'un réécrive le code Go pour faire quelque chose de plus intelligent si nous voulons comparer plus précisément.
Java remporte le test de performance de mandelbrot car il s’agit uniquement d’arithmétique en virgule flottante et de boucles; c’est donc un excellent endroit pour que la machine virtuelle Java génère un très bon code machine et optimise les performances au moment de l’exécution. Go, en comparaison, a un compilateur assez simple qui ne lève pas, ne déroule pas et ne génère pas de code machine très serré actuellement, il n’est donc pas surprenant qu’il perde. Cependant, il convient de garder à l'esprit que le minutage Java ne compte pas le temps de démarrage de la machine virtuelle Java ni les nombreuses fois où il doit être exécuté pour que la machine virtuelle s'exécute correctement. Pour les programmes à long terme, ce n'est pas pertinent, mais cela compte dans certains cas.
Pour ce qui est des autres points de repère, Java et Go sont fondamentalement à égalité, Go consomme beaucoup moins de mémoire et, dans la plupart des cas, moins de code. Ainsi, alors que Go est plus lent que Java dans un certain nombre de ces tests, Java est assez rapide, Go se débrouille plutôt bien en comparaison et Go deviendra probablement beaucoup plus rapide dans un proche avenir.
Je suis impatient de voir gccgo (un compilateur Go utilisant le codegen gcc) arriver à maturité; Cela devrait rendre Go assez proche de C pour de nombreux types de code, ce qui sera intéressant.