雨谷の日和

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

Javaでのバイナリ出力(最適化有)

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倍ほども遅い。
しかも、前回の最適化していない場合に比べてもほとんど最適化が効いていないようにも見える。
これはどういうことだろうか。「文字コードの変換処理が実行速度低下の原因である」という結論が間違っていたのだろうか。
これはちょっと考えてみなければならないようだ。