1. クラスのロード機構
は、 ロード、検証、準備、解析、初期化、使用、アンロードに分かれています。
(1) 読み込み
ハードディスクを検索し、IO 経由でバイトコードファイルを読み込み、main() メソッドの呼び出しなど、クラス使用時のみ読み込みます。クラスの新しいオブジェクトなどの読み込みフェーズ中に、このクラスを表す java.lang.Class オブジェクトがメモリ内に生成され、メソッド領域内のこのクラスのさまざまなデータへのアクセスの入り口として機能します。
(2) 検証
バイトコードファイルが正しいかどうかを検証します。
(3) クラスの静的変数にメモリを割り当て、デフォルト値を割り当てるための準備をします。
(4) 分析
シンボリック参照を直接参照に置き換えるこの段階で、一部の静的メソッド (main() メソッドなどのシンボル参照) は、メモリへのポインタに置き換えられます。データの保存またはハンドルなど (直接参照)、これはいわゆる静的リンク プロセス (クラスのロード中に完了)、動的リンクはプログラムの実行中に完了し、シンボリック参照を直接参照に置き換えます。次のレッスンでは動的リンクについて説明します。
(5) 初期化
2. 親委任メカニズムクラスの静的変数を指定された値に初期化し、静的コード ブロックを実行します。 。
アプリケーション クラス ローダー AppClassLoader は、クラスの親委任メカニズムのソース コードを読み込みます。AppClassLoader のloadClass メソッドは、最終的にその親クラス ClassLoader のloadClass メソッドを呼び出します。このメソッドの一般的なロジックは次のとおりです:
まず、指定した名前のクラスがロードされているかどうかを確認し、ロードされている場合は再度ロードする必要はなく、直接リターンします。
このクラスがロードされていない場合は、親ローダーがあるかどうかを確認します。親ローダーがある場合は、親ローダーによってロードされます (つまり、parent.loadClass(name, false を呼び出します)。 );)。または、ブートストラップ クラス ローダーを呼び出してロードします。
親ローダーもブートストラップ クラス ローダーも指定されたクラスを見つけられない場合は、現在のクラス ローダーの findClass メソッドが呼び出されて、クラスのロードが完了します。
3. 全責任委任メカニズム「全責任」とは、別の ClassLoder が明示的に使用されない限り、ClassLoder がクラスをロードするときに、そのクラスが依存し、参照されることを意味します。クラスもこの ClassLoder によってロードされます。
以上がJavaにおけるJVMのさまざまなメカニズムとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。