クラスローディング機構に関連するテストサイト
1.詳細なクラスローディング機構
クラスローディングは、コンパイルされたクラスのバイトコードがメモリに読み込まれたクラスファイル、エリアとは、対応するクラスオブジェクトを作成する方法を指します。
クラスがにロードされるロードリンク初期化もリンクの検証、準備、分析の3つのステップが含まれ、。私たちは一つ一つを分析しました。
-
プロセスファイルがメモリにロードされます。クラスの完全修飾名で、このようなバイトコードファイルを検索し、バイトコードファイルを使用したClassオブジェクトを作成します
-
検証は、ファイルクラスの内容を検証することです。目的は、仮想マシンの現在の要件を満たすクラスファイルは、仮想マシンが自分自身の安全を危うくしないことを確実にするためです。:それは4種類含まれたファイル形式の検証、メタデータの検証、バイトコード検証、シンボリック参照の検証を。
-
準備フェーズは、メモリの割り当てです。クラス変数を変更静的変数メモリのクラスで割り当て、初期値を設定し、それは初期値が0またはヌルであることに留意され、むしろコードに設定された特定の値よりも、コードセットの値は、初期化フェーズで行われますA。コンパイル時に最終的に割り当てられますので、またここでは、静的変数の最終変更には含まれていません。
-
メインフィールドは、構文解析、インタフェース、メソッドが解析されます。メインプールは、直接参照を置き換えるプロセスへのシンボリック定数の参照です。直接参照は、相対オフセットなど、オブジェクトへの直接のポインタです。
-
最後に初期化:静的ブロック静的変数の割り当てを実行するメイン終了します。彼らは、スーパークラスが初期化されていないロードされている場合、これは、クラスローダの最終段階で、最初に親クラスが初期化されます。
このクラスの唯一の活性使用、初期化されるときに、初期化トリガ条件は、クラスまたは静的メソッドは静的変数にアクセスするときにクラスを反映し、Class.forNameの()はクラスのインスタンスを作成する、またはサブクラスが含まれます初期化時間。
ライフサイクル・クラスは、クラスからクラスのインスタンスの作成と使用にロードされ、GCはアンインストールしてからクラスオブジェクトがもはや使用されたときに回復することはできません。ここでは、Java仮想マシンによってクラスローダの3種類が付属して、ことに注意しなければならないだけで、ユーザー定義のクラスローダロードしたクラスをアンロードすることができ、仮想マシンのライフサイクル全体がアンロードされることはありませんロード。
2.詳細なクラスローダ
クラスローダブートストラップもシステムローダとして知られる、クラスローダおよびローダーアプリケーションを展開し、開始するには:されたJavaローダは三種類が付属しています。図の右側にオレンジ色のテキストは、対応するディレクトリをロードローダーの様々なタイプを示しています。クラスローダをクラスパス指定されたディレクトリをロードするアプリケーションクラスローダの負荷extディレクトリに責任がある拡張クラスローダの下にlibディレクトリのクラスのJavaホームをロードし起動します。
また、クラスローダをカスタマイズすることができます。
クラスをロードするときに、Javaクラスローダデリゲート両親が実行するために、親クラスローダに委託要求を入れ、パターン、つまりクラスローダを使用し、そこに親クラスローダの親クラスローダ場合、我々は、最高委員会に引き続き青方向の矢印で示されるように、ブートクラスローダーの上部まで。親クラスローダクラスローダが完了した場合は、親クラスローダがロードを終えることができない場合は、子ローダは、独自のをロードしようとする、正常に返さ。
委任両親のこのモデルの利点、また、コアのJava APIを回避しながら、クラスロードの繰り返しを避けるためには、改ざんされています。
ます。https://juejin.im/post/5cefdcf86fb9a07eeb138d86で再現