IBM Technology for Java SDK のクラス共有では、透過的で動的な方法が提供されます。これによって、ロードされたすべてのクラス (アプリケーション・クラスとシステム・クラスの両方) を共有でき、クラス・データを共有する JVM には制限が設けられません (実行時のバイトコード修正が使用時を除く。)

複数の JVM 間でアプリケーションのすべての不変クラス・データを共有すると、以下のような明確なメリットがあります。

したがって、クラス共有は、類似のタスクを実行する新しい JVM インスタンスを定期的に開始するアプリケーションにもメリットがあります。

1 つの JVM で空のキャッシュにデータを投入するコストが最小限に抑えられます。複数の JVM でキャッシュに同時にデータ投入する場合、このアクティビティは、通常両方の JVM でディスクからクラスをロードするよりも高速です。

IBM のクラス共有機能に関する重要点は以下のとおりです。

共有クラスの作成

共有クラスを切り替えるには、SystemDefault.properties -Xshareclassesオプションと-Xscmx command-lineオプションを使用します。

指定できるキャッシュ・サイズは、システムで使用可能な物理メモリーとページング・スペースで制限されます。プロセスの仮想アドレス・スペースは共有クラス・キャッシュとJavaヒープ間で共有されるため、Javaヒープの最大サイズを増やすと、作成可能な共有クラス・キャッシュのサイズは減少します。

#AllowOptions
 
-Xscmx16M
-Xshareclasses:name=myJSM

共有クラスのリスト表示

キャッシュをリスト表示する場合、共有クラス・キャッシュを作成したときと同じJVMを使用する必要があります。ただし、すべてのバージョンのキャッシュをリスト表示するJDK6バージョンを除きます。

JDK5では、共有クラスをリスト表示するJVMで互換性のある共有クラスが見つからない場合、どの共有クラスがあるかどうかにかかわらず、JVMSHRC005Iメッセージが表示されます。

JDK6では、VMは通常、他のJ9 VMから共有クラス・キャッシュを認識しますが、非互換の共有クラスとしてキャッシュをリスト表示します。

ヒント:JAVA_HOME環境変数を設定するのではなく、JDKのjavaシェル・スクリプト・ファイルの絶対パスを使用します。


QSH
 
/QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit/bin/java -Xshareclasses:listAllCaches
 
    すべてのキャッシュは cacheDir /tmp/javasharedresources/ にリストされます。
    Cache name              level         persistent  last detach time
    Compatible shared caches                                                
    myJSM                   Java6 64-bit  yes         In use
 
    Incompatible shared caches
    myJSM                   Java5 64-bit  no          Wed Jun 25 14:49:44 2019
    myJSM                   Java5 32-bit  no          Wed Jun 25 14:46:06 2019
    myJSM                   Java6 32-bit  yes         Wed Jun 18 12:18:59 2019
 

注:4つの JSM キャッシュがあり、開始された STRJSMJVM バージョンごとに 1 つのキャッシュがあります。

共有クラスの消去

キャッシュを消去する場合、共有クラス・キャッシュが作成されたときと同じJVMを使用する必要があります。

QSH
 
/QOpenSys/QIBM/ProdData/JavaVM/jdk50/64bit/bin/java -Xshareclasses:destroy,name=myJSM
 
JVMSHRC010I の共有キャッシュ "myJSM" が消去されました。
Java 仮想マシンは作成できません。