JDK 1.1 開発ガイド (Solaris 編)

入出力

一般的に、Java アプリケーションで最も一般的で大きなパフォーマンス上の問題は、非効率的な入出力です。このため、一般的に入出力の問題は、Java アプリケーションのパフォーマンスチューニングで最初に検討すべき問題になります。入出力の問題を解決することによって、その他のすべての最適化を行なった場合よりも大幅にパフォーマンスが向上することがあります。効率的な入出力手法を用いることによって、10 倍以上の速度の向上が得られることも珍しくありません。

アプリケーションが大量の入出力を行う場合は、入出力のパフォーマンスチューニングを行なってみてください。チューニング結果は、アプリケーションをプロファイルすることによって確認できます。Java アプリケーションのプロファイルするには、Sun の Java WorkShopTM 製品を使用することができます。Java WorkShop は、以下の URL から入手することができます。

Java WorkShop のオンラインヘルプで、プロファイラまたはプロファイルについての説明を参照してください。以下の例は、4 つの異なるメソッドを使用して、150,000 行からなるファイルを読み取るベンチマークテストの結果です。

  1. DataInputStream.readLine() のみ (バッファーなし)

  2. DataInputStream.readLine()BufferedInputStream (2048 バイトのバッファーあり)

  3. BufferedReader.readline() (8192 バイトのバッファーあり)

  4. BufferedFileReader(fileName)

結果は次のとおりです (単位: 秒)。

 DataInputStream: 178.740
 DataInputStream(BufferedInputStream): 21.559
 BufferedReader 11.150
 BufferedFileReader  6.991

メソッド 1 と 2 では Unicode の文字が正しく処理されませんが、メソッド 3 と 4 では Unicode 文字が正しく処理されることに注意してください。つまりほとんどの製品では、メソッド 1 と 2 は使用できないことになります。JDK 1.1 では、DataInputStream.readLine() も推奨されません。Java WorkShop とその他のプログラムでは、メソッド 1 が使用されています。

Solaris の入出力処理の問題を見つけるためのもう 1 つの方法として、truss(1) を使用して、read(1)write(1) システムコールを検索するという方法もあります。