雨谷の日和

過去20年で2,700を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

Javaは速度を求めていない?

ここでのコメントで助言頂いているkp氏が、ご自身のサイト(monthly mho/diary)でJavaとCとの比較について言及頂いています。いつも有難うございます。コメントします。
以下、氏のサイトの2004-04-01から引用です。

そもそもの言語のコンセプトとして、Javaは速度を求めていない。もちろん高速化の努力がなされていることは認めるし、実際に速くなってきているであろうことはわかっている。しかしそれは第一義ではない。
"write once,run anywhere."の言葉が示すようにJavaの言語コンセプトはその可搬性にある。
それ以外にも、オブジェクト指向な言語仕様や豊富なエラー処理などといった、「Javaの便利な」機能てんこ盛りで、その上で

Cには,プログラマは,自分が何をしようとしているかを知っているという基本哲学は残されている。

[プログラミング言語C第2版より引用]


というC言語に速度で勝とうというのは、そりゃあ欲張りすぎだと思う。
結局のところ、速度をあまり求めない場合は機能が豊富な言語を選択すればいいし、速度を求める場合にはそれなりの速度の言語を選択する必要がある。

とりあえず私が知りたいのは「Cは本当に速いのか」「速いとしたらどれくらいなのか」「その速さの前提となる条件は何か」というC側の観点と、「Javaは本当に遅いのか」「遅いとしたらどれくらいなのか」「その遅さの前提となる条件は何か」というJava側の観点です。
それが分からないとそもそも「速度をあまり求めない場合は機能が豊富な言語を選択すればいいし、速度を求める場合にはそれなりの速度の言語を選択する必要がある」という判断をするための手掛かりが無いような気がしているのですが。
例えば、前回までの出力系の処理においては外部的要因の影響が大きくて、JavaでもCでも処理性能は変わらないと分かったわけで。文字コード変換の負荷が結構大きいということも分かったわけで。
そういった結論はもちろん理論的に予測は出来ているんでしょうけども、実際にはどうなのか、測ってみないと分からないこともあるんじゃないかなぁと個人的には感じています。
まあ、今はとりあえず助言を頂きながら色々趣味的に実測してみているだけではあります。
「write once,run anywhere」はどうなんでしょうね。最近は実行前にネイティブコードに直接コンパイルするAOT(Ahead of Time)コンパイラも認知され始めていますから、当初の思惑からすると方向性が変わってきているのかも知れませんし。
あ、機会がとれれば、AOTの性能も実測してみようかな。幸いGCJもあるし。