今までに測ってきた結果を、表にまとめておこう。
Pentium4:2.4GHz WindowsXP(MS932) cygwin gcc3.3.1 JDK1.4 |
C | Java | 最適化 無 | 最適化 有 | 最適化 無 | 最適化 有(*3) |
Encode 無 | Encode 有 | Encode 無 | Encode 有 |
---|---|---|---|---|---|---|---|
出力 (*2) | バッファ無 | 16 | 16 | 17 | 153(*1) | 17 | 7(*1) |
バッファ有 | 5 | 5 | 9 | ? | 4 | ? |
(*1)Encoding処理の内部バッファが有るので、正確にはバッファ無ではない。
(*2)Cの出力関数としてはfputsを用いた。
(*3)Javaの最適化はHotSpot(実行時最適化)。
文字コード変換が無い状態でのJavaの性能は、ほとんどCのそれと同じであることが分かる。
最適化されたものはむしろCより速いようにも見えるが、これは今回の場合、誤差の範囲と考えるべきかも知れない。
結局、出力処理ではJavaとCの性能差よりも、出力にかかわる処理(ファイルへの書き出しなど)の負荷が高く、そちらの性能の方が測定結果に効いてきていると言って良いようだ。
ちなみに表に埋まっていないところが2箇所あるが、これは測定を行っていないからである。
測る必要はあまり無いような気もするが、埋まっていないのは気持ち悪い。
ということで次回は、Javaの文字列出力でバッファリングをした場合を検証してみる。