ホームページ  >  記事  >  Java  >  JVM クラスのロード プロセスの段階は何ですか?

JVM クラスのロード プロセスの段階は何ですか?

青灯夜游
青灯夜游オリジナル
2021-07-27 11:43:5513658ブラウズ

クラスのロード プロセス: 1. ロード段階、2. 検証段階、3. 主にメモリの割り当てとメソッド領域のクラス変数の初期化を行う準備段階、4. 解析段階、5. 初期化段階。コンパイラはクラスファイル内で宣言された静的代入変数と静的領域をマージしてcinitメソッドを生成し呼び出す、6.使用フェーズ、7.アンインストールフェーズ。

JVM クラスのロード プロセスの段階は何ですか?

#このチュートリアルの動作環境: Windows7 システム、Java8 バージョン、DELL G3 コンピューター。

JVM クラスのロード プロセスを理解するには、主に 2 つの質問に答える必要があります:

1. クラスはいつロードされるか?

2. クラスのロード方法。

JVM クラスのロード プロセスの段階は何ですか?

1. クラスロードのトリガー条件:

クラスロードのプロセスは主に 7 つに分かれています。ステージ: ロード、検証、準備、解析、初期化、使用、アンロードの 5 つのプロセスの順序が決定されており、JVM はこの順序に厳密に従う必要があります。JVM はタイミングを指定しませんただし、次の 5 つの状況ではクラスを直ちに初期化する必要があり、その前にロードを行う必要があると厳密に規定されています。

1. new、getstatic、putstatic、invokestatic の 4 つの命令に遭遇したとき、クラスが初期化されていない場合は、クラスが最初に初期化されます。

2. java.lang.reflect パッケージのメソッドを使用してクラスへのリフレクション呼び出しを行う場合、クラスが初期化されていない場合は、その初期化がトリガーされます。

3. クラスを初期化するときに、そのクラスの親クラスが初期化されていない場合は、最初にその親クラスの初期化がトリガーされます。

4. JVM を実行するには、メイン メソッドを含むメイン クラスを指定する必要があります。仮想マシンは最初にこのクラスを初期化します。

5. Jdk1.7 の動的言語サポートを使用する場合、java.lang.invoke.MethodHandle インスタンスの最終解析結果が REF_getstatic、REF_putstatic、REF_inokestatic、およびそれに対応するクラスのメソッド ハンドルである場合このメソッドハンドル このクラスの初期化は、初期化がない場合にトリガーされます。

2. クラスロードプロセス

クラスロードプロセスは主にロード、検証、準備、解析、初期化、そしてアンインストールして使用してください。

1. ロード:

1) 完全修飾名を使用して、クラスに対応するバイナリ バイト ストリームをロードします。主にクラスローダーを通じて実装されます。

2) バイト ストリームで表される静的ストレージ構造をメソッド領域の実行時データ構造に変換します。

3)、このクラスを表す java.lang.Class オブジェクトをメモリ内に生成します。これは、メソッド領域内の各クラスがこのクラスにアクセスするための入り口として機能します。 (ホットスポットはメソッド領域にこのクラスを生成します)。

2. 検証:

1)、ファイル形式の検証: クラス ファイルのマジック バージョン番号定数が現在の仮想マシンでサポートされている範囲内であるかどうかを検証します。 。

2)、メタデータ検証: クラスのセマンティック情報が Java 言語仕様の要件を満たしているかどうかを検証します。

3)、バイトコード検証: プログラムのセマンティクスが合法で準拠していることを検証します。主に stackmapframe 構造を通じて。

4)、シンボル参照の検証: 仮想マシンはシンボル参照を直接参照に変換し、シンボル参照の完全修飾名で表されるクラスが見つかるかどうか、対応するドメインとメソッドが見つかるかどうかを検証します。を見つけることができ、アクセス許可が正当であるかどうか。

3. 準備:

準備段階では主にメソッド領域のクラス変数(static修飾子で修飾)のメモリ確保と初期化を行います。

データ タイプゼロ値データ タイプゼロ値int0booleanfalselong 0Lfloat0.0fshort0double0.0dchar'\u0000'referencenullbyte0

4. 解析:

1)、クラスまたはインターフェイスの解析: 修飾された参照をクラスへの直接参照に変換し、アクセス許可を確認します。

2)、フィールド解析: フィールドのシンボリック参照を、フィールドが属するクラス情報、またはその親クラスのフィールドへの直接参照に変換し、アクセス権限を確認します。

3)、クラスメソッドの解析: クラスメソッドのシンボリック参照を、そのクラスメソッドが属するクラス情報、またはその親クラスのフィールドへの直接参照に変換し、アクセス権限を確認します。

4)、インターフェイスメソッドの解析: インターフェイスメソッドのシンボリック参照を、インターフェイスメソッドが属するインターフェイス情報、またはその親クラスのフィールドへの直接参照に変換し、アクセス権限を確認します。

5. 初期化:

初期化フェーズでは、コンパイラはクラス ファイルで宣言された静的代入変数と静的領域をマージして、 を生成します。メソッドを作成して呼び出します。

クラス ローダー: クラス ローダーは、「完全修飾名を使用してクラスのバイナリ バイト ストリームをロードする」実装です。どのクラスでも、クラス ローダーとクラス自体で構成されます。仮想マシン内での一意性。

親委任モデル:

JVM クラスのロード プロセスの段階は何ですか?

##1. ブートストラップ ClassLoader はクラス ローダーを開始し、/lib/rt.jar をロードします。

2. 拡張クラスローダーは、/lib/ext にパッケージをロードします。

3. アプリケーション クラスローダーは、CLASSPATH パスにある JAVA クラス ライブラリをロードします。

4. User ClassLoader ユーザー定義のクラスローダー。

親委任モデルは、このメソッドを使用してクラスをロードします。クラス ローダーがクラスをロードするリクエストを受け取ると、まず親クラスにクラスをロードするよう委任します。すべてのクラス ローダーがこのメソッドを使用するため、すべてのクラスロードリクエストはすべて最上位の親クラスに到達しますが、親クラスがロードできない場合は、クラスローダーを使用してロードされます。このように、クラス ローダー間には階層関係があり、Java の基本クラスが同じクラス ローダーによってロードされることが保証され、Java システムの安定性に重要な役割を果たします。

推奨される関連ビデオ チュートリアル:

Java ビデオ チュートリアル

以上がJVM クラスのロード プロセスの段階は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。