JAVAクラスのロードプロセスとは何ですか?
JAVAのクラスのロード処理は主にロード、リンク、初期化の3段階に分かれます。
- クラスローディングは、ファイルシステムまたはネットワークから クラスの.classファイルをメモリにロードし、Classオブジェクトを作成することです。クラスローダは、クラスの完全修飾名から対応する.classファイルを検索・読み取り、これをバイトコードストリームに変換して、バイトコードストリームからClassオブジェクトを作成します。
- リンク: クラスローダーが完了すると、リンク操作が行われます。リンクのプロセスには、検証、準備、解析の 3 つの段階が含まれます。
- 検証: 検証フェーズは主に、クラスのバイトコードがJVM仕様に準拠しているかどうかを検査するもので、ファイル形式の検証やセマンティック検査などが含まれます。
- 初期化:初期化段階では、クラスの静的変数のメモリ確保と初期値の設定を行い、実際の初期値はクラスの初期化時に与えられます。
- 解析:解析 phase はマインリ プレース シンボル レファレンス ダイレクト レファレンス、クラス、メソッド、フィールドのようなシンボル レファレンス コンスタント プール 直接 レファレンス(メモリ中のアドレスへのポインタ)変換、ダイレクト アクセス プログラム が対応するメソッド、フィールド。
- クラスローディング・リンキングが終わるとJVMはクラスの初期化フェーズに入る。初期化フェーズはクラスの静的コードブロックと静的変数の代入を実行する段階である。静的コードブロックは静的リソースの初期化を行うことができ、静的変数の代入は宣言順に実行される。初期化はクラスローディングの最後の段階であり、初期化が完了しないとクラスのインスタンス化はできない。