では、昨日と同じ処理を、こんどは最適化有りで実行してみる。
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 もたいして速度に差はない」ということになるはずだったのだが。
しかし結論するのはまだ早いと思う。見た目は同じようなプログラムでも、内部的な処理が異なるということが有り得るからだ。
ファイル出力のサンプルでもそうだった。あのときと同じように、注意深く検証してみる必要があるのかも知れない。
ちょっと色々調べつつ、考えてみたい。