- 締切済み
CとJavaはどのくらいスピードが違うの?
BorlandのJBuilderなど、Javaもネイティブコードコンパイラがありますよね。質問ですが、 (1) UNIXで動くJavaのネイティブコードコンパイラで優秀なものはあるのでしょうか。 (2) C言語でコンパイルしたプログラムとJavaでネイティブコードコンパイルしたプログラムは、どのくらい速度に差があるのでしょうか? たとえば、Visual Basicも最近のバージョンはネイティブコードコンパイルができますが、C言語で作った同じ論理構造のプログラムに比べて、やはり、かなり実行速度が劣ります。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- hidebu-
- ベストアンサー率53% (45/84)
回答No.1
JAVAはネイティブレベルの実行形式にコンパイルするのではありません。 中間コードに変換して、実行時にJVMが中間コードをインタープリタ方式で逐次実行していくので(正確にいうともっと工夫してるのですが基本はこうです)、機械語レベルまでおとしこむC等とはまったくちがいます。 建前上(システムコールなどを多様すると絶対とはいえないため)、UNIXであろうがWINDOWSであろうがMACであろうが中間コードにコンパイルしてしまえばどこでも動くので、UNIXに特化したコンパイラなんてものは基本的に存在しません。(バイトコードをネイティブレベルまで落とし込むツールはありましたが) VisialBasicがCで作成したものと実行速度に違いがあるのは、VisialBasicが曖昧な記述でも作成できるようになっているからです。 EXEにおとしこんだときにネイティブコードでその曖昧さをカバーする結果、実行時にさまざまなオーバーヘッドが生まれるためです。(VBライブラリがヘボイっていうこともありますが)
お礼
回答ありがとうございます。 Javaは、基本的にはおっしゃるとおりだと思うのですが、たとえば、 GNU Java Compiler for Linux(http://gcc.gnu.org/java/ ) を見ると、 「It can compile Java source code directly to "native machine code".」 とあって、マシンコードを作ることができると書いてあります。 あと、私がJBuilderも、Professional バージョン以上だとネイティブコンパイルができる、と書いてあったので(たしか・・)Professional購入を考えています。 ただ、これらのネイティブコードコンパイルというのが、同じネイティブコードでも、Cで作ったものに比べてどのくらい実行速度が違うのかな、というのが気になっています。JVMで使うというより、C(C++)の代わりとして使うことを考えているので、とくにUNIX上で動く優秀なコンパイラがあるのかな、と思ったわけです。