[解決済み] なぜ、Javaで書かれたゲームソフトは少ないのですか?[クローズド]
質問
なぜ多くの商用3Dビデオゲーム(ランダムなオープンソースの2Dのものではない)は、Javaで書かれていないのでしょうか?理論的には、Javaは非常に理にかなっています。生産性が向上し、クロスプラットフォームのアプリケーションをほぼ無料で手に入れることができますし、膨大な数のJavaライブラリや内蔵のガベージコレクション(後者が良いことかどうかは分かりませんが)などもあります。では、なぜほとんど使われていないのでしょうか?私は、Javaプラットフォーム用に書かれた人気のある商用ゲームを2つほど思いつくだけです。
それは性能のせいでしょうか?もしそうなら、どうせ重い仕事はほとんどGPUがやっているのでは?
どのように解決するのか?
ゲーム開発の世界というのは面白いものです。一方では、新しいアイデアをすぐに受け入れ、他方では、まだ石器時代のままであることが多いのです。
実は、.NET/Java/C/C++以外のものに乗り換えるインセンティブはほとんどないんです。
ほとんどのゲーム会社は、ゲームエンジンの一部を他社からライセンスを受けています。これらの部分はC++で書かれており、ソースにアクセスできるので移植できるかもしれませんが、それには多くの労力がかかります(もちろん、ライセンスがそれを許可している必要があります)。
また、多くのレガシーコードがすでにC++で存在しています。もし、以前のプロジェクトのコードが再利用できるのであれば(例えば、続編を書く場合)、新しい言語で書き直すのではなく、同じ言語を使う方がより有利になります(多くのバグを再導入する可能性があり、それを解決するのに時間がかかるため、なおさらそうです)。
カスタムであれ、既存の言語を統合したものであれ、多くの場合はスクリプト言語を使っています(最近ではLuaが有名です)。
ガベージコレクションに関しては、ちょっと問題かもしれませんね。ガベージコレクタはノンブロッキングでなければなりません(あるいは、少なくともごく短時間しかブロックしないことが保証されていなければなりません)。Javaは、メモリ不足になりそうになるとGCでかなり詰まる傾向があることは知っています(そして、世の中のいくつかのゲームでは、そうなっています)。
また、ランタイムのオーバーヘッドにより、ハードウェアを完全に活用することができないため、できることが少し制限されます。CrysisがJavaで書かれていると想像してみてください...目に見える違いはそれだけだとしても、同じようにはいかないでしょう(実行するにはCore i7が必要なのも確かです)。
だからといって、これらの言語がゲーム開発において居場所がないわけではありませんし、ツールプログラミングだけを指しているわけでもありません。ほとんどのゲームでは、3Dゲームを含め、C++のような余分なパフォーマンスは必要ありませんし、すべてをゼロから書くのであれば、XNAのようなものを使うことは完全に理にかなっています。
商業的なゲームに関して言えば、そうでしょうか? ルネスケープ を数えることができますか?最も成功したJavaゲームかもしれませんね。
関連
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] なぜJavaにはtransientフィールドがあるのですか?
-
[解決済み] 特定のUnicode文字を含むコメントでのJavaコードの実行が許可されているのはなぜですか?
-
[解決済み] なぜJavaでは2 * (i * i)の方が2 * i * iより速いのですか?
-
[解決済み] List<Dog> は List<Animal> のサブクラスですか?Java のジェネリックはなぜ暗黙のうちに多相性にならないのですか?
-
[解決済み] 静的変数が悪とされるのはなぜですか?
-
[解決済み] なぜJavaでは静的メソッドを抽象化できないのですか?
-
[解決済み] JavaでNoClassDefFoundErrorが発生するのはなぜですか?
-
[解決済み] enumとは何か、なぜ有用なのか?
-
[解決済み】array[idx++]+="a "は、Java 8ではidxを1回増やすが、Java 9と10では2回増やすのはなぜか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
アクセス制限について アプリケーションの種類がAPIでない(必要なライブラリの制限)。
-
アクセス制限です。タイプ 'Application' は API ではありません。
-
JDKの設定時にjava.dllが見つからない、java SE Runtime Environmentが見つからない問題が発生しました。
-
Intellij IDEAのエラー「CreateProcess error=2, system could not find specified file」に対する完璧な解決策です。
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
javax.net.ssl.SSLException: 読み取りエラー: ssl=0xdeae5100: システムコール中の I/O エラー、接続 res
-
あるコードに出会いましたが、何に使うのか理解できません。 List<String> list = new ArrayList<String>() { { a
-
Maven Pluginの実行がライフサイクル設定の対象外であるエラーの解決