2010-07-31 (土)
*C++とJavaと
C++で書いたプログラムをJavaでも実装してたのですが,なんだかC++で書いたものとだいぶ違うものになってきてしまったので,C++のほうもJava版と同じように書き直す.C++で書いたサーバとJavaのクライアントで通信させるために,データ構造とかは同じにしたほう都合が良いので.
面倒なので,とりあえずjavaのメソッドをコピー&ペーストして少し修正.そしたら,案の定,かなり遅くなってしまった.最初に書いたやつと比べて5倍くらい遅い….
アルゴリズムは殆ど変わってないのだけど,一時的なオブジェクトを作りすぎなのが問題だよなぁ.スタック上にオブジェクトを置けないのと,オブジェクトの実体を配列上に確保せずにバラバラにnewしてるのが効いてるな.
C++とJavaの実行速度が変わらないというのも分かる気がする.JavaもJITがあるので,同じプログラムならコンパイラの最適化の勝負です.問題は,コンパイラにできない類の最適化をプログラマがどうにか解決するための機能がJavaに無いことだと思います.速度を意識してC++で書いたコードはそもそも同じものをJavaで書けない….