今日、Zhihu で <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">Go</span>
と <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;font-size: 14px;">Java</span>
のパフォーマンスの比較についての質問を見ました。通常、結末は 1 つだけであり、それについては終わりのない議論が続いています。今から 10 年後、これら 2 つの言語がまだ存続している場合、これは依然としてホットな問題になる可能性があります:
現在、私は主に Java と Go を使用しており、方向性はビッグデータです。
#ほとんどの言語には得意分野があり、その存在は合理的です:
#PHP<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"></span> 低コストの WEB 構築が得意。これは世界最高の言語でもあります。
<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"> オペレーティング システムと組み込みが得意</span>
<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"> 自然に高い同時実行属性</span>
の科学計算と統計は比類のないものです <span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;">#</span>
#Python<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"></span>
は AI 分野のリーダーです
## Java<span style="box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;font-size: 15px;"></span> 産業グレードのアプリケーション サービスと Android (TIOBE リストを長い間独占してきた古いギャング)
ベンチマーク<span style="color: rgb(74, 74, 74);box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;"> テスト データは確かにいくつかの問題を説明できますが、このテスト環境と方法はまだ十分に根拠がありません。同様のケースに遭遇することはまれであり、今後も発生することはありません。数ミリ秒のギャップがあったため、言語を変更してプロジェクトをリファクタリングしました。 </span>
Hot Code この概念は非常に重要です。一部のコード スニペットは月に 1 回ヒットしますが、その後はヒットしません。どこまで極端な最適化が必要か。 <span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;"></span>
28 ルール、コードの重要な 20% にエネルギーの 80% を費やしてください。エネルギーには限りがありますが、オリジナルの記事を書いてみんなと共有するなど、世界にはまだ美しいことがたくさんあります(手動ウィンク)。 <span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;"></span>
私の経験に基づくと、ほとんどの人の現在のプログラミング レベルはそうではありません。私が言語自体のパフォーマンスについて話す番です。そうでない場合は、WeChat に私を追加して飛ばしてください。 <span style="color: rgb(74, 74, 74);font-size: 16px;box-sizing: border-box;background-image: initial;background-position: initial;background-size: initial;background-repeat: initial;background-attachment: initial;background-origin: initial;background-clip: initial;display: inline-block;padding-right: 2px;padding-left: 2px;line-height: 22px;"></span>
メリットとデメリットのまとめ
JAVA の現在の問題はパフォーマンスではありません。JIT によって自動的に最適化されたコードはすでに C と同等であるためです。
JAVA の問題は、実際の実際のプロジェクトでは、サードパーティへの依存関係が多すぎること、アーキテクチャが肥大化していること、過剰な設計があることです。現時点では、どちらが勝つかを言うのは難しいです。
個人的には、Go は基本的に標準ライブラリしか必要としないため、実際のプロジェクトでのパフォーマンスは JAVA よりも優れていると思います (Go のコルーチンは本質的に非同期 IO モデルであり、Go 言語: すべてが非同期です)。また、リソース使用量もパフォーマンスの一部であり、明らかに go の方がメモリ使用量が少なく、CPU 消費量も比較的少ないです。
#Go on the Benchmark ゲームは、ほとんどのシナリオで Java よりも高速に実行され、メモリ消費量は Java の 1/3 です。
#リストに挙げてみましょうGo の欠点:
Java の欠点:
- #これは少し反プログラマ構文です
- ##ジェネリックがありません
- 標準ライブラリのデータ構造は Java よりもはるかに豊富ではありません
- 依存関係管理は役に立たない
- ##チャネルが不適切に使用されると、デッドロックが非常に発生しやすくなります
# コンパイル中にループ インポートは許可されません
多くのパッケージ名はコーディング中にカスタム変数名と競合します
Java には当然のことだと思っているライブラリがたくさんありますが、Go では車輪の再発明が必要であることがわかりました
go get コマンドは、履歴コミットを含む git ウェアハウス全体のクローンを作成します
標準ライブラリはルーチン プールを提供しません
既成の Future メカニズムはありません。チャネルを通じて自分で実装する必要があります。
これらは、とりあえず思い浮かびますが、もちろんこれらはすべて解決できます
##言語の欠如表現スキル (現実的な用語は「臭くて長い」です)
当面思い浮かぶのはこれらのことです。もちろん、Java の利点はこれらの欠点をはるかに上回りますが、そうでなければ Java は役に立ちません。 TIOBE プログラミング言語ランキングで年間を通じて 1 位にランクされる
#メモリと CPU の消費量が多い
#ヒープ メモリが大きい場合、満足のいくリサイクル効果を得るにはガベージ コレクタを詳細に調整する必要がありますが、場合によっては、リアルタイム要件が高いシナリオでは、gc では解決策がない場合があります。フル gc がトリガーされると、地獄になります。
プログラムをウォームアップする必要があります
JDK は巨大で、springboot jar パッケージも巨大です (問題はマイクロサービス アーキテクチャで最も顕著です)
##Spring FamilyBucket はますます重くなり (Spring の場合、IoC AOP を実行するだけで十分です)、その結果、FamilyBucket を使用するアプリケーションのパフォーマンスが低下します (TechEmpower Round 14 の Spring の位置を参照してください)。しかし、依然として重くなっています。十分な
成熟したフレームワークやライブラリが多すぎるため、プログラミングを始めるときはAPIを調整したりフレームワークを使用したりするだけだと偏見を持っている人が多いですが、彼らは原則についてほとんど知りません
以上がGo のパフォーマンスは Java ほど良くない?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。