ということで長々とかかってしまったが、ファイル出力処理におけるJavaとCとの性能比較はここまでで一区切りである。
まとめておこう。
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 | 130 | 4 | 6 |
(*1)Encoding処理の内部バッファが有るので、正確にはバッファ無ではない。
(*2)Cの出力関数としてはfputsを用いた。
(*3)Javaの最適化はHotSpot(実行時最適化)。
・ファイル出力処理ではそもそも外部要因的な負荷が大きいため、CとJavaとの性能差は無視できるほどでしかない。
・ファイル出力処理ではバッファリングの有無が性能に大きく影響する。
・Javaの文字列出力は、文字コード変換の分遅い。ただし、文字コード変換には内部的なバッファリングがあるため、その影響は無視できない。
・ファイル出力処理では、Javaの実行時最適化は文字コード変換、バッファリングなどをかなり効率化する。一方、Cはもともとがかなり最適化されているためか、高度な最適化をした場合でもその効果は少ない。
今後は、OSによる処理性能の違いと、外部要因の影響の少ない処理での比較を行ってみたい。