Java 2 SDK 開発ガイド (Solaris 編)

高性能メモリシステム

Java 2 SDK Solaris 版には高度に最適化されたメモリシステムが組み込まれているため、メモリの割り当てやガベージコレクションが以前よりも効率的になります。このメモリシステムでは直接ポインタが使用されます。このメモリシステムには次の特徴があります。

このような機能により、プログラムの性能が向上し、ガベージコレクションのために対話プログラムが中断されることが少なくなります。

高性能メモリシステムの一部で次の機能が拡張されたため、システムの性能が大幅に向上します。

正確なガベージコレクション

Java 2 SDK Solaris 版では正確なガベージコレクションが行われます。このガベージコレクションでは、従来のシステムよりも広範囲なガベージコレクション技法が使われるため性能が向上します。

Java 2 SDK Solaris 版では、多くのアプリケーションに対して大幅に性能が向上する効率的な世代管理方式のガベージコレクタが使用されています。世代管理方式のガベージコレクションでは、割り当て済みオブジェクトのサブセットに対して、再利用が可能かどうかが検査されます。このサブセットの選択はオブジェクトの古さに基づいて行われ、そこでは新しい「世代」ほど頻繁に検査が行われます。このサブセット化を行うのは、Java プログラムでは、新たに作成されたオブジェクトほど、古いオブジェクトと比べて回収の対象である可能性が高いためです。通常、新しい世代の回収はすべてを回収する場合よりかなり短い時間で済むため、この手法には、ガベージコレクションのための一時停止時間が短縮されるという利点もあります。

この性能の向上を実現するには、ユーザが作成したネイティブコードを含めて、システム全体が正確なガベージコレクションをサポートしている必要があります。JNI (Java Native Interface) の実装では、正確なガベージコレクションに対応することができます。Java 2 SDK Solaris 版では、そうした実装が可能なため、JNI を使用して作成したネイティブコードは Java 2 SDK Solaris 版 VM に対してそのまま使用できます。

直接ポインタ

Java 2 SDK Solaris 版の正確なガベージコレクションでは、オブジェクトに対しハンドルの代わりに直接ポインタが使用されます。直接ポインタではオブジェクトをアクセスするための間接レベルが 1 つ除かれるため、メモリ使用量が減少し、割り当て速度が増し、システム性能が向上します。

ヒープにおけるダブルワード (long と double) の 8 バイト境界への位置合わせ

ヒープではダブルワード値は 8 バイト境界に位置合わせされます。そのため、SPARCTM システムで、変動しやすいダブルワード値を正確に保持しながら、ネイティブコードおよび JIT でコンパイルされた Java コードの性能が両方とも向上します。ただし、アプリケーションで小さいオブジェクトをたくさん割り当てて保持する場合は、ヒープサイズをいくらか増やす必要があるかもしれません。これらのオブジェクトは 8 バイトの倍数の境界に割り当てられるため、メモリ使用量が増加するからです。