ホームページ >Java >&#&チュートリアル >JVMクラスロードのプロセスは何ですか

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

coldplay.xixi
coldplay.xixiオリジナル
2020-08-12 15:08:123238ブラウズ

JVM クラスのロードのプロセス: まずロードを実行し、次にクラス ファイルのバイト ストリームに含まれる情報が現在の仮想マシンの要件を満たしていることを確認し、次に静的変数にメモリを割り当てる準備をします。クラスの値を取得してシステムの初期値に初期化し、最終的に解析して初期化します。

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

#jvm クラスのロード処理:

1. Loading # jvm はロード時に次の 3 つのことを行います。

1) クラスの完全修飾名を通じてクラスのバイナリ バイト ストリームを取得します。

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

# 3) クラスのデータへのアクセス入口として、メモリ ヒープ内にクラスを表す java.lang.Class オブジェクトを生成します

2. 検証

検証、準備、分析の 3 つのステップは、クラスのバイトコードと JVM の実行状態を結び付ける接続プロセスとみなすことができます

検証では、クラス ファイルのバイト ストリームに含まれる情報が現在の仮想マシンの要件を満たしており、jvm のセキュリティを脅かさないことを確認します。

検証には主に次の検証が含まれます。側面:

1) ファイル形式の検証。バイト ストリームがクラス ファイルの仕様に準拠しているかどうか、および現在のバージョンの仮想マシンで処理できるかどうかを検証します。

2)メタデータ検証、バイトコードで記述された情報のセマンティック分析の実行、Java 言語仕様への準拠の確認

# 3) バイトコード検証はデータ フローと制御フロー分析に合格し、セマンティクスが合法的かつ論理的であることを判断します

4) シンボル参照の検証 このチェックは解析中に実行されます 段階が発生します

3. 準備を整え、クラスの静的変数にメモリを割り当て、クラスの初期値に初期化しますシステム。 Final static によって変更された変数の場合、

はユーザー定義の値に直接割り当てられます。次の例のように、準備フェーズ後の初期値は、7

public static int a=7

4 ではなく 0 です。 # 解析とは、定数プール内のシンボル参照を直接参照(物理メモリアドレスポインタなど)に変換することです

5. 初期化

初期化段階、jvm が実際に開始します。 クラスで定義された Java コードを実行します。

1) 初期化フェーズは、クラス コンストラクターの () メソッドを実行するプロセスです。 classconstructor() メソッドは、クラス内のすべてのクラス変数の代入アクションを自動的に収集し、静的ステートメント ブロック (静的ブロック) 内のステートメントをマージするコンパイラーによって生成されます。

2) クラスを初期化するときに、その親クラスが初期化されていないことが判明した場合は、最初に親クラスの初期化をトリガーする必要があります。

3) 仮想マシンは、クラスの () メソッドがマルチスレッド環境で正しくロックされ、同期されていることを確認します。

関連する学習に関する推奨事項:

Java 基本チュートリアル

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

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