クラス・データ共有

概要

クラス・データ共有(CDS)は、Javaプログラミング言語アプリケーション(特に小さなアプリケーション)の起動時間を短縮し、フットプリントを少なくするのに役立ちます。インストーラを使用してJREをインストールすると、インストーラがシステムjarファイルから一連のクラスをprivate内部表現にロードして、その表現を「共有アーカイブ」と呼ばれるファイルにダンプします。JREインストーラを使用しない場合は、以下で説明するように、手動で行うこともできます。共有アーカイブはそれ以降のJVM呼出し中にメモリー・マッピングされるので、これらのクラスをロードするコストが節約され、JVMのこれらのクラス用のメタデータの多くを複数のJVM処理で共有できます。

クラス・データ共有は、Java HotSpot Client VMでのみ、およびシリアル・ガベージ・コレクタでのみサポートされます。

CDSをJava SEに含める主要な動機は、CDSによる起動時間の短縮です。CDSでは、固定コスト(ある種のコア・クラスのロード・コスト)がなくなるため、小さなアプリケーションの場合により良い結果が得られます。使用するコア・クラスの数に比べてアプリケーションが小さいほど、起動時間の節約比率が大きくなります。

新規JVMインスタンスのフットプリント・コストは、2つの方法で削減されています。まず、共有アーカイブの一部(現在は5-6MB)が読取り専用でマップされ、複数のJVM処理で共有されます。これまでは、このデータは各JVMインタフェースでレプリケートされていました。2番目は、共有アーカイブにJava Hotspot VMが使用する形でクラス・データが含まれているため、rt.jar内のオリジナル・クラス情報にアクセスするために使われていたメモリーが必要なくなりました。これらの節約により、同じマシン上でより多くのアプリケーションを同時に実行できます。Microsoft Windowsでは、処理フットプリント(様々なツールで測定)が増えたように見える場合があります。これは、処理のアドレス空間に大量のページがマッピングされるためです。これは、rt.jarで一部を保持するために必要とされるメモリー量(Microsoft Windows内)が減ることで相殺されます。フットプリントの削減は、依然として優先度の高い課題です。

共有アーカイブの再生成

状況によっては、システム管理者が共有アーカイブを手動で再生成する必要があります。これは通常、Solaris上で、インストールを実行するマシンとは異なるアーキテクチャのマシンに、ネットワーク経由でJava SEパッケージがインストールされた場合にのみ必要です。これに関係なく、ここで取り上げる再生成に関する説明は、サポートされているすべてのプラットフォームに当てはまります。

共有アーカイブ・ファイルは、JVMの共有ライブラリと同じ場所にあります。Solaris、Linux、またはMac OS Xプラットフォームではjre/lib/[arch]/client/classes.jsaに格納され、Microsoft Windowsプラットフォームではjre/bin/[client or server]/classes.jsaに格納されます。このファイルがある場合は、再生成を行う前に手動で削除する必要があります。

アーカイブを再生成するには、まず管理者としてログインします。ネットワークに接続した状態で、Java SEインストールと同じアーキテクチャのマシンにログインし、インストール・ディレクトリへの書込み権限があることを確認します。次のコマンドを実行します。

java -Xshare:dumpアーカイブが生成されると、診断情報が出力されます。

手動によるクラス・データ共有の制御

クラス・データ共有機能は、使用できる条件が整えば自動的に有効になります。次に示すコマンド行オプションは、主に診断とデバッグを行うためのもので、今後のリリースで変更または削除される可能性があります。

-Xshare:off
クラス・データ共有を無効にします。
-Xshare:on
クラス・データ共有の有効化を要求します。さまざまな理由で有効にできない場合は、エラー・メッセージを出力して終了します。
-Xshare:auto
デフォルト。可能な場合は常にクラス・データ共有を有効にします。

Copyright © 1993, 2020, Oracle and/or its affiliates. All rights reserved.