主な理由として聞いた話ではC++は処理が早いと聞いたのですが同じオブジェクト指向でもJAVAは何で遅いのかなども気になっています。私はプログラムを独学する程度の知識はありますが、多くの言語を広く浅くという程度なので深く携わった方のご意見も伺えればと思います。
http://q.hatena.ne.jp/1200988823
http://q.hatena.ne.jp/1207318858
など他の質問も見ました。言語の使い分けって余程の規模でない限りは厳密に考えることなく結構曖昧なところかなと思いますが(本職の企業レベルだとプロとしてまた別の話かもしれませんが)。どうぞよろしくお願いします。
1つ目は
C++で書かれた言語はコンパイルするとネイティブコードになります(マシン語)
そのためのそれ用のOSでしか動きませんが早いです。
3つのOSに対応する場合、3つのソースコードが必要な部分があります。
Javaはコンパイルしてもネイティブコードになりません。
JavaVMが理解する中間コードになります。
1度ソースを書けばJAVAVMという仮想マシン上で動くので
どのOSでも基本的に動きます。
ただ、間に1枚処理が入るのでその分が遅いです。
2つ目は
Javaはメモリ管理を基本的にしなくてもかまいません。
使われなくなった変数や領域は自動的にガーベジコレクションによって開放されます。
この処理もJavaのバージョンがあがる度に早くはなっていますが、
処理がしないよりは遅いです。
C++ではガーベジコレクションがないので、自分でメモリ管理をしなければなりません。
使わなくなった変数は自分で開放していかなくてはなりません。
開放は1つも忘れてはなりません。余計な処理をしないため、面倒ですが、早いです。
ただ、この開放忘れはメモリリークといって重大なバグにつながる上、
原因を発見しにくいバグです。
主にビジネスソフトやWebソフトを作るときには少しの速度犠牲の変わりに
開発しやすさを求めてるので上の2つはJavaでOKですが、
ゲームとなると厳しい速度に対する要求があるのでC++が多くなります。
ただ、携帯電話のゲームなどはJavaで多く書かれています。
サーバ側はメモリや処理速度を重視してC++になると思います。
あと、処理速度以外の面ではクライアント側のJavaはリバースエンジニアリングが簡単という点も大きいでしょう。
オンラインゲームは不正対策が徹底されている必要があるのでサーバとどのような通信をしているかは出来るだけ秘密にしたいわけです。
その点、Javaのバイトコードは中間言語にコンパイルされているだけなので、どこにでもあるようなツールを使うだけで、元のソースコードにかなり近い形まで簡単に戻すことが出来てしまいます。
そうすると悪巧みをするユーザの手による不正行為が横行しやすくなってしまうという問題点です。
まぁ当然バイトコードの暗号化を行うような製品もありますが…それでもネイティブコードに比べたら解析の容易さの次元が違うと思って差し支えないでしょう。
Windows 上で動作するゲームには http://www.getamped.jp/ のように Java を基盤としているものもある。
http://www.cyberstep.com/business/platform.html にちょっとした説明があるけど、Oni というプラットフォームらしいね。
・ガベージコレクションがコントロールできない(しにくい?)
・開発者がJavaに慣れていない事が多い。
・使用するライブラリがC言語対応のみとか。
といった内容が多いです。
作る度に悩みますが結局はC++で作る事になっています。
ポイントつけたいと思ってるのですが、回答終了後にポイントつけれなかったかな、、
いつも思うのですが、自動でポイント設定されてしまって手をつけるタイミングがわからず。
これもどこかに回答あるかな、、、