プログラム実行速度の改善
JDK 6 の拡張機能
JDK 6 での多くのパフォーマンス拡張の説明は、パフォーマンス Web サイトの「
Java SE 6 Performance Whitepaper」を参照してください。
JDK 5.0 の拡張機能
次に挙げるのは、プログラム実行速度を改善するために JDK 5.0 で行われた拡張の一部です。
- ガベージコレクションのエルゴノミクス - クライアントまたはサーバーの実行時コンパイラを自動的に検出して選択します。これにより、サーバークラスのマシンでのパフォーマンスが向上します。詳細は、「Java 仮想マシン」の「サーバー - クラスマシンの検出」および「ガベージコレクションエルゴノミクス」を参照してください。
- StringBuilder クラス - 新しいクラス StringBuilder を追加しました。このクラスは、パフォーマンスを向上するため、基本的に非同期の StringBuffer として動作します。同期が必要でないかぎりは、StringBuffer をすべて StringBuilder に置き換えてください (同期はほとんど必要ありません)。StringBuilder は、ほとんどの場合 StringBuffer よりも高速です。
- Java 2D™ テクノロジ - Java 2D のパフォーマンス拡張による副産物として、Swing や JFC など、ほかの機能分野のパフォーマンスにも良い影響が及んでいます。たとえば、BufferedImage オブジェクトの高速化向上、OpenGL を使用したハードウェア高速化によるレンダリングのサポート、テキストレンダリングのパフォーマンス向上などが挙げられます。詳細は、「Java 2D の新機能」を参照してください。
- Image I/O - JPEG イメージの読み書き処理時のパフォーマンスおよびメモリー使用が向上しました。「Image I/O の新機能」の「パフォーマンスの向上」を参照してください。
J2SDK 1.4 での拡張機能
次に挙げるのは、プログラム実行速度を改善するために J2SDK 1.4 で行われた拡張の一部です。
- Java 2D™ テクノロジ - Java 2D のパフォーマンス拡張による副産物として、Swing や JFC など、ほかの機能分野のパフォーマンスにも良い影響が及んでいます。J2SDK 1.4 でのパフォーマンス改善の一例として、Solaris でのリモート X 表示が大幅に改善されています。パフォーマンスの拡張を含む、Java 2D の拡張機能の詳細は、「Java 2D の新機能」を参照してください。
- java.nio - New I/O API では、バッファー管理、スケーラブルなネットワークとファイル入出力、文字セットのサポート、および正規表現マッチングの分野でパフォーマンスが向上しています。New I/O API は、java.io パッケージの入出力機能を補足するものです。詳細は、「I/O API」を参照してください。
- リフレクション - J2SDK 1.4.0 以降では、一部のリフレクションベース処理、具体的には java.lang.reflect.Field、java.lang.reflect.Method.invoke()、java.lang.reflect.Constructor.newInstance()、および Class.newInstance() が書き直されて、パフォーマンスが向上しました。リフレクションベースの呼び出しやインスタンス化は、以前のリリースに比べ数倍速くなりました。
- ネットワーク機能 - J2SDK 1.4 のネットワーク機能では、HTTP ストリーミングのパフォーマンスが改善されました。
- java.math - BigInteger クラスに、素数を生成するための新しい static メソッド probablePrime が追加されました。従来は、BigInteger の素数を生成する方法は 1 つしかなく、メソッドの呼び出し側から、「確実性」(呼び出し側が許容できる、結果が素数でない確率の対数) を提供する必要がありました。しかし、提供する確実性の値が不適切だと、パフォーマンスが低下したり (確実性の値が高すぎる場合)、重大なバグが発生したり (値が低すぎる場合) することがありました。この新しい素数生成メソッドは、ANSI のドラフト仕様 (X9-80) に基づいて自動的に判別される適切な確実性の値を使用する、素数生成のための効率的なアルゴリズムを提供します。
- Hotspot - Java HotSpot[TM] 仮想マシンでは、「フルスピードデバッグ」を使用するようになりました。旧バージョンの HotSpot では、デバッグが有効にされている場合、プログラムはインタプリタのみを使用して実行していました。このバージョンでは、HotSpot テクノロジのパフォーマンス面の利点を、デバッグが有効な状態で動作しているプログラムにおいて活かすことができます。パフォーマンスが向上すると、長時間動作するプログラムをより簡単にデバッグできるようになります。また、フルスピードでテスティングを行なったり、例外上でデバッガを起動できるようになりました。
J2SDK 1.3 での拡張機能
次に挙げるのは、プログラム実行速度および一般的な実行時パフォーマンスを改善するために、以前のリリースである J2SDK 1.3 で加えられた変更の一部です。これらの拡張は、J2SDK 1.4 にも引き継がれています。
詳細は、Bug Database の Web サイトにある関連するバグレポートのリンクを参照してください。
- readUTF および writeUTF のパフォーマンスの改善 - DataInputStream および DataInputStream の readUTF メソッドおよび writeUTF メソッドの実装が変更され、パフォーマンスが改善されました。これは、Bug Database の Web サイトにあるバグ番号 4219771 の修正です。
- JScrollPane ペイントのパフォーマンスの改善 - JScrollPane の実装が改善され、ダブルバッファリングが使用されていないときに過剰なペイントと画面のちらつきが起きないようになりました。
- JTable のパフォーマンスの改善 - JTable の列処理機能のパフォーマンスが改善されました。以前は、列の追加操作または列幅の再計算操作のパフォーマンスは、列数の増加に合わせて十分に増強されませんでした。パフォーマンスの増強を改善するために、実装が変更されました。これは、Bug Database の Web サイトにあるバグ番号 4223642 の修正です。
- ペイントの合体 - 改善されたペイント合体アルゴリズムの実装によって、ペイントのパフォーマンスが拡張されました。再ペイントが必要な領域は、イベントキューに送信されるときに、単一の、四角形でない再ペイント領域に合体されます。これにより、再ペイントがバッチ処理され、以前のリリースより効率的に複数の再ペイントが同時実行されます。
- フレームのサイズ変更 - トップレベルフレームのサイズ変更が改善されました。
- フレームの内部移動 - Graphics.copyArea 呼び出しの使用により、Swing の DefaultDesktopManager が再描画する量は、フレームをドラッグするときに比べて大幅に少なくなりました。
- BigIntenger のパフォーマンス向上 - Pure Java のプログラミング言語コードにクラス java.math.BigInteger が実装し直されました。以前は、BigInteger の実装は Plumb C ライブラリをベースにしていました。新しい実装により、すべての標準操作が古い実装よりずっと高速に実行されます。新しい実装では、実行する操作によっては 5 倍以上高速になります。
- 数値演算のパフォーマンスを向上させる機能の提供 - Java 2 プラットフォームに、一般的な数値演算を実行するための API を提供する 2 つのクラスが追加されました。
- java.lang.StrictMath - クラス java.lang.StrictMath は、以前のバージョンの Java プラットフォームのクラス java.lang.Math の名前が変わったものですが、ほかの点では Math の仕様を保持しています。このクラスは、特にすべての実装でビット単位まで再現可能な結果を返すように定義されています。
- java.lang.Math - クラス java.lang.Math は、クラス StrictMath と同じ API のセットを提供します。ただし、クラス StrictMath の一部の数値関数とは違って、クラス Math の等価な関数のすべての実装は、ビット単位まで同じ結果を返すようには定義されておらず、特定の制約内で結果が異なることがあります。このゆるやかさによって、厳密な再現性が要求されない実装においてパフォーマンスの向上が可能になります。