言語設計に関しては、一般的にJavaよりもGoを遅くするものは何もありません。実際、データ構造のメモリレイアウトをより細かく制御できるため、多くの一般的なタスクでは、多少速くなるはずです。ただし、現在のプライマリGoコンパイラ、スケジューラ、ガベージコレクタ、正規表現ライブラリ、およびその他の多くのものは特に最適化されていません。これは着実に改善されていますが、マイクロベンチマークでの勝利よりも有用で、シンプルで、高速であることに焦点が置かれているようです。
リンクされたベンチマークでは、Goはバイナリツリーと正規表現テストでJavaに大きく負けています。これらは、それぞれメモリ管理システムと正規表現ライブラリのテストです。Goのメモリ管理はより高速で、時間の経過とともに確実に改善される可能性があります。また、現在の標準の正規表現ライブラリは、まもなく実装されるより優れた実装のプレースホルダーです。したがって、これら2つを失うことは驚くことではなく、近い将来、マージンはより狭くなるはずです。
k-ヌクレオチドベンチマークの場合、Javaコードは別のアルゴリズムを使用しているように見えるため、比較がやや困難です。Goコードは、書かれたとしても、コンパイラ、スケジューラ、アロケータの改善から確実に恩恵を受けますが、より正確に比較したい場合は、誰かがGoコードを書き直してより賢い何かをする必要があります。
Javaはすべて浮動小数点演算とループであるため、マンデルブロベンチマークでJavaが勝ちます。これは、JVMが実行時に本当に優れたマシンコードを生成し、物を持ち上げるのに最適な場所です。それに比べて、Goは非常にシンプルなコンパイラを備えており、現在は非常にタイトなマシンコードを巻き上げたり、展開したり、生成したりしないため、失うことは驚くことではありません。ただし、JavaのタイミングはJVMの起動時間や、JVMが適切にJITを実行するために実行する必要がある回数をカウントしないことに注意してください。長時間実行されるプログラムの場合、これは関係ありませんが、場合によっては重要です。
残りのベンチマークに関しては、JavaとGoは基本的に首尾一貫しており、Goが消費するメモリとほとんどの場合コードが大幅に少なくなります。そのため、これらのテストの多くでGoはJavaよりも低速ですが、Javaは非常に高速であり、Goはそれと比較して非常に良好です。また、Goはおそらく近い将来に著しく高速になるでしょう。
gccgo(gcc codegenを使用するGoコンパイラ)が完成するのを楽しみにしています。これにより、多くの種類のコードでGoがCとほぼ一致するようになるはずです。