回答:
Javaは仮想マシンで実行され、C ++はハードウェアで直接実行されます。これが意味することは、メモリがどこに行くのか、C ++で何をするのかをより詳細に制御できるということです。
Javaはガベージコレクションされた言語です。メモリを直接制御することはできません。新しいメモリチャンクを割り当てることはできますが、削除されるタイミングを(細かく)制御することはできません。ガベージコレクターは、xフレームごとに割り当てたメモリをすべてチェックし、ガベージコレクターであるか、まだ使用されているかを判断します。
ゲームの場合、これは悲惨な場合があります。いくつかのフレームごとに、ガベージコレクターが1つ1つ割り当てをチェックして、それがまだ使用されているかどうかを確認しますか?減速について話してください!
次に、使用するライブラリのほとんどがCで書かれているか、C ++で書かれています。Scaleform、Havok物理エンジン、PhysX、SpeedTreeなどについて話しています。すべてのプロフェッショナルパッケージは、業界で広く使用されています。他の言語が王になりたいなら、それは彼らをより良くサポートします。
私の個人的な見解では、Javaはデスクトップアプリケーションやアプリには本当に適していますが、ゲームには適していません。Javaには開発者向けの優れたツールが多数あり、理論的にはJava仮想マシンの実装を備えた任意のプラットフォームで実行できますが、メモリを制御する必要があるため、C ++の方が好きです。特に、エキゾチックなデータ構造(赤黒木、二重リンクリストなど)で作業を開始する場合、すべてのメモリ割り当ての概要を把握するのに役立ちます。
私は言っていない:Javaを使用しないでください。私は言っている:あなたがJavaを使用している理由を考えてみてください。MinecraftはJavaで構築されたため、Javaでゲームを構築することは確かに可能です。しかし、C ++で構築されていれば、より良いゲームになっていたでしょうか?確かに、ビッグ3(Windows、MacOS、Linux)で実行するのはそれほど安上がりではなかったでしょうが、それでも、開発中にプラットフォーム固有のバグ、Javaがスムーズにできないバグに遭遇しました以上。
現在、初心者プログラマ向けのC ++フレームワークがたくさんあります。特に業界でのキャリアを促進したい場合、それを学ばない言い訳は本当にありません。
簡単な答え:C ++はネイティブコードにコンパイルされるため、パフォーマンスはランタイムやVMではなく開発者に委ねられます。
長い答え:
C ++が「高速」であることは、C ++とは関係ありません。現時点では、複数のプラットフォーム用のスタンドアロンのネイティブコードを生成するツールでサポートされている数少ない言語の1つです。
昔は、C、C ++、BASIC / 2、Delphiなどを使用して、効率的で独立した実行可能ファイルを取得できました。言語の選択は、個人の好みと市場の力の問題でした。
最近では、「C ++の方が速い」という仮定は本質的に自己実現的な予言ですが、LLVMはパーサーの意味をなにかにするので、それを変更するのに良い立場にあります。
ボーランドはそれを正しかった。複数の言語を解析し、最初に最適化を適用してから、共通のバックエンドコンパイラとリンカーに渡しました。これは実質的にLLVMの主要な成果の1つです。
Javaは、JVMなしで実装するのが非常に難しいような方法で構造化されています。奇妙なことに、C#は、一般的に、また誤って、Javaとほぼ同等であると想定され、iOSを含むいくつかのプラットフォームでネイティブコードに既にコンパイルされています。
私のクリスマスリストのトップ?戻ってプロパティ、実際の例外処理、および実際のWORKINGポリモーフィズムをC ++に追加し、パーサーが独自に理解できるf "d上矢印構文の不要部分を取り除くタイムマシン。その10年間のプリプロセッサを作成しました。前にそれはおかしくなりますから。