クラスローダ【理解】
1708 ワード
クラスローダの役割が担当する.classファイルをメモリにロードし、対応するjavaを生成する.lang.Classオブジェクト.クラスのロードメカニズムに過度に関心を持つ必要はありませんが、このメカニズムを理解すれば、プログラムの実行をよりよく理解することができます.
JVMのクラスローディングメカニズム全体の責任:クラスローダがクラスローダをロードする責任を負う場合、クラスローダが依存し参照する他のクラスローダもクラスローダによってロードされます.別のクラスローダを使用して をロードすることを表示しない限り、クラスローダがロードされます.親委任:クラス・ローダがクラスをロードする責任を負う場合、親ローダにクラスをロードしようとします.親ローダがクラスをロードできない場合にのみ、自分のクラスパスからクラスをロードしようとします. キャッシュメカニズム:ロードされたすべてのクラスがキャッシュされることを保証し、プログラムがクラスオブジェクトを使用する必要がある場合、クラスローダはまずキャッシュ領域からクラスを検索し、キャッシュ領域にクラスオブジェクトが存在しない場合にのみ、システムはクラスに対応するバイナリデータを読み出し、クラスオブジェクトに変換し、キャッシュ領域 に格納する.
Javaに組み込まれたクラスローダ Bootstrap class loader:仮想マシンの内蔵クラスローダで、通常nullとして表され、親null はありません. Platform class loader:プラットフォームクラスローダはすべてのプラットフォームクラスを見ることができます.プラットフォームクラスにはプラットフォームクラスローダまたはその祖先によって定義されたJava SEプラットフォームAPIが含まれています. System class loader:プラットフォームクラスローダとは異なり、アプリケーションクラスローダとも呼ばれます.システムクラスローダは、通常、アプリケーションクラスパス、モジュールパス、およびJDK特定ツール上のクラス を定義するために使用される.クラスのローダの継承関係:Systemの親ローダはPlatform、Platformの親ローダはBootstrap ClassLoaderの2つの方法メソッド分類
メソッド名
説明
static ClassLoader getSystemClassLoader()
委任用のシステムクラスローダを返します
ClassLoader getParent()
親ローダに戻って委任
サンプルコード
JVMのクラスローディングメカニズム
Javaに組み込まれたクラスローダ
メソッド名
説明
static ClassLoader getSystemClassLoader()
委任用のシステムクラスローダを返します
ClassLoader getParent()
親ローダに戻って委任
public class ClassLoaderDemo {
public static void main(String[] args) {
//static ClassLoader getSystemClassLoader():
ClassLoader c = ClassLoader.getSystemClassLoader();
System.out.println(c); //AppClassLoader
//ClassLoader getParent():
ClassLoader c2 = c.getParent();
System.out.println(c2); //PlatformClassLoader
ClassLoader c3 = c2.getParent();
System.out.println(c3); //null
}
}