Java仮想マシン-クラスローダー
JVMは、クラスとインターフェースのロード、リンク、および初期化のプロセスを動的に管理します。ロードプロセス中に、JVM finds the binary representation of a class and creates it.
リンクプロセス中に、 loaded classes are combined into the run-time state of the JVM so that they can be executed during the initialization phase。JVMは基本的に、リンクプロセスのために実行時定数プールに格納されているシンボルテーブルを使用します。初期化は実際に構成されていますexecuting the linked classes。
ローダーの種類
ザ・ BootStrapクラスローダーは、クラスローダー階層の最上位にあります。JREのlibディレクトリに標準のJDKクラスをロードします。
ザ・ Extension クラスローダーはクラスローダー階層の中間にあり、ブートストラップクラスローダーの直接の子であり、JREのlib \ extディレクトリにクラスをロードします。
ザ・ Applicationクラスローダーはクラスローダー階層の最下部にあり、アプリケーションクラスローダーの直接の子です。で指定されたjarとクラスをロードしますCLASSPATH ENV 変数。
リンク
リンクプロセスは、次の3つのステップで構成されます-
Verification−これは、生成された.classファイル(バイトコード)が有効であることを確認するために、バイトコードベリファイアによって実行されます。そうでない場合、エラーがスローされ、リンクプロセスが停止します。
Preparation −メモリはクラスのすべての静的変数に割り当てられ、デフォルト値で初期化されます。
Resolution−すべてのシンボリックメモリ参照は元の参照に置き換えられます。これを実現するために、クラスのメソッド領域の実行時定数メモリ内のシンボルテーブルが使用されます。
初期化
これは、クラスのロードプロセスの最終フェーズです。静的変数には元の値が割り当てられ、静的ブロックが実行されます。