雨谷の日和

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

Javaでの行列式計算(最適化有)

では、昨日と同じ処理を、こんどは最適化有りで実行してみる。

java -Xprof Test

結果は以下のようになった。

result: 489261678

Flat profile of 8.88 secs (541 total ticks): main

  Interpreted + native   Method                        
  0.2%     0  +     1    java.util.zip.ZipFile.open
  0.2%     0  +     1    java.lang.Class.forName0
  0.4%     0  +     2    Total interpreted

     Compiled + native   Method                        
 99.6%   530  +     4    Test.expand
 99.6%   530  +     4    Total compiled

  Thread-local ticks:
  0.9%     5             Blocked (of total)


Global summary of 8.88 seconds:
100.0%   568             Received ticks
  4.4%    25             Received GC ticks
  0.2%     1             Other VM operations

なんと、約9秒しか掛からなかった。
最適化されていないJavaの約10分の1というのはまあ、予想できないこともない結果なのだが、Cのそれよりも約5倍弱も速いというのには驚いている。
屁理屈太郎氏の指摘だと、再帰呼び出しや配列の動的確保などを使ったプログラムでは速度が遅くなるので「Java も C もたいして速度に差はない」ということになるはずだったのだが。
しかし結論するのはまだ早いと思う。見た目は同じようなプログラムでも、内部的な処理が異なるということが有り得るからだ。
ファイル出力のサンプルでもそうだった。あのときと同じように、注意深く検証してみる必要があるのかも知れない。


ちょっと色々調べつつ、考えてみたい。