Go のパフォーマンスと Java: 矛盾の探求
2010 年のコンピューター言語ベンチマーク ゲームでは、Go が C や Java よりも大幅に遅いことが明らかになりました。ジャワ。 Go がネイティブ コードを生成することを考えると、どのようにしてこのようなことが可能なのでしょうか?
一部の人は、パフォーマンスの問題の原因を未熟なコンパイラに帰して、Go 言語の本質的な遅さを無視しています。しかし、さらに詳しく調査すると、コンパイラー自体ではパフォーマンスのギャップを完全には考慮できないことが明らかになりました。
ベンチマークで使用された 6g および 8g コンパイラーは特に最適化されていないため、コードの速度が低下します。対照的に、gccgo は GCC の高度な最適化パスを活用しており、C とのより公正な比較ができる可能性があります。ただし、機能の点ではまだ不完全です。
最終的に、ベンチマークの数値は実装の品質に大きく依存します。これらは言語自体を直接反映するものではありませんが、Go 実装がベンチマークに必須ではない機能をサポートするためにランタイム リソースを割り当てている可能性があることを示しています。コンパイラを最適化すると、理論的にはこのような不要なオーバーヘッドを削除できますが、このアプローチは現実のシナリオでは非現実的になる可能性があります。
たとえば、Java の場合、JIT コンパイルされたコードは不要なコード パスを効果的に削除できます。ただし、この偉業には課題がないわけではありません。これらの最適化されたパスウェイの維持は複雑になる可能性があるためです。
実証テストでは、gccgo が -O2 で最適化された C に匹敵するコードを生成することが示されています。これは、Go が本質的に遅いのではなく、現在のコンパイラーがそのコードを完全に最適化できないことを示唆しています。 Go エコシステムが成熟し、コンパイラーが進化するにつれて、パフォーマンスのギャップが縮まり、速度と効率を要求するアプリケーションにとって Go がより魅力的な選択肢になることが予想されます。
以上がネイティブ コードを生成しているにもかかわらず、Go は Java よりも遅いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。