Javaではその仕様上必須となる文字コード変換が実行速度の低下の原因であるという結論から、前回は文字コード変換無しの出力を実際に実行してみた。
その結果は予想通りだったわけだが、こんどは同じ処理について実行時最適化を行った場合を見てみよう。
Flat profile of 16.76 secs (1072 total ticks): main Interpreted + native Method 0.1% 1 + 0 java.io.Win32FileSystem.normalize 0.1% 0 + 1 java.io.FileOutputStream.open 0.2% 1 + 1 Total interpreted Compiled + native Method 1.3% 14 + 0 Test.main 0.2% 2 + 0 java.io.FileOutputStream.write 1.5% 16 + 0 Total compiled Stub + native Method 97.3% 4 + 1039 java.io.FileOutputStream.writeBytes 97.3% 4 + 1039 Total stub Thread-local ticks: 1.0% 11 Unknown: thread_state Global summary of 16.76 seconds: 100.0% 1072 Received ticks 1.0% 11 Unknown code
なんと、文字列を出力していた時よりも遅くなってしまった。
最適化していない場合では、文字コードの変換処理を無くすだけで約10倍ほども速くなったのに対し、こちらは約2倍ほども遅い。
しかも、前回の最適化していない場合に比べてもほとんど最適化が効いていないようにも見える。
これはどういうことだろうか。「文字コードの変換処理が実行速度低下の原因である」という結論が間違っていたのだろうか。
これはちょっと考えてみなければならないようだ。