クラスローディング
はじめに
クラスローディングは、JVMがクラスファイル(.class)をメモリに読み込み、使用可能な状態にするプロセスです。この仕組みを理解することで、Spring BootのDI(依存性注入)やプラグインシステムの動作原理を把握できます。
クラスローディングの3つのフェーズ
┌─────────────────────────────────────────────── ──────────────┐
│ クラスローディングの流れ │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. Loading(ロード) │
│ ┌────────────────────────────────────────────────────┐ │
│ │ .classファイルをバイナリデータとして読み込む │ │
│ │ → java.lang.Class オブジェクトを生成 │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ 2. Linking(リンク) │
│ ┌────────────────────────────────────────────────────┐ │
│ │ a. Verification(検証) │ │
│ │ → バイトコードの正当性を検証 │ │
│ │ │ │
│ │ b. Preparation(準備) │ │
│ │ → static フィールドにデフォルト値を設定 │ │
│ │ │ │
│ │ c. Resolution(解決) │ │
│ │ → シンボリック参照を実際の参照に変換 │ │
│ └────────────────────────────────────────────────────┘ │
│ ↓ │
│ 3. Initialization(初期化) │
│ ┌────────────────────────────────────────────────────┐ │
│ │ static イニシャライザとstatic フィールドの初期化 │ │
│ └────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘