JavaにおけるJVMのさまざまなメカニズムとは何ですか

PHPz
リリース: 2023-05-26 17:48:40
転載
938 人が閲覧しました

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート