クラスローディング機構とは何ですか
Java型を形成するJVMの負荷クラス記述データクラスからメモリへファイル、およびデータを確認し、初期化を解析変換は、直接JVMクラスローディング機構であるJVMで使用することができます。
あなたは、クラスファイルの構造に精通していない場合は、前の記事を参照することができます(上の)クラスファイル構造を総合的に分析し、ファイル構造(下)のクラス総合的に分析。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
クラスのライフサイクル
クラスからメモリにロードされ、メモリは、以下のステップに分け、合計に搬出されます。
- 負荷(ロード)
- 検証(検証)
- 調製(準備)
- 構文解析(解像度)
- 初期化(初期化)
- 利用(使用)
- アンインストール(アンロード)
クラスは、前記全体のプロセス、ロードローディング、検証、製造、解析、初期化フェーズを。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
ロード
ロードクラスのロードの最初の段階で、このステップJVM仕様で、以下の3つのことを完了するために必要な:
- クラスの完全修飾名で、バイナリバイトストリームクラスの定義を取得するには。
- 静的記憶構造は、複数のランタイムデータ構造領域法にバイトストリームで表されます。
- メモリにこのクラスのjava.lang.Classオブジェクトの代表を生成します。
実際には、上記の要件は、特定のではなく、JVMの特定の実装およびアプリケーションはより柔軟です。たとえば、このクラスのバイナリバイトストリームを取得し、どこ入手方法、言わない得るために、そのアーカイブ、ネットワークからの取得(アプレット)、計算実行時から(JAR、WAR、EAR)が読み込まれます生成(動的プロキシ)。負荷のためにクラスの配列ではありません、我々はバイトストリームを取得する方法を制御するために、独自のクラスローダを定義することができます。クラス自体は、クラスローダによって作成された配列ではないただし、配列クラスに同じではなく、JVMは直接作成。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
検証
このフェーズでは、情報のバイトストリームクラスファイルはJVM、JVMの現在の要件に沿って含まれており、独自のセキュリティを危険にさらすしないことを確実にするためです。おおよそ次の4つの段階に分け:
ファイル形式の検証
クラスファイル形式に準拠したバイトストリームを確認し、これはJVMによって処理することはできません。など、より多くの検証のポイント、:マジックナンバー0xCAFEBABEの始まりかどうか、メジャーとマイナーバージョン番号が現在のプロセスのJVMの範囲内で、一定のサポートされていないタイプがあるかどうかの定数定数プール、定数のCONSTANT_Utf8_info型の非準拠UTF8とするかどうか符号化されたデータなどが挙げられます。この段階は、メモリ記憶領域メソッドを入力するバイトストリームで検証この段階で、バイナリバイトに基づいて検証フローです。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
メタデータの検証
この段階では、メタデータ情報は、Java言語仕様に準拠していないが存在しないことを確実にするために、主にメタデータ情報など意味解析と検証です。例えば:親クラスjava.lang.Object上位以外のクラスに加えて、存在する場合、継承されたか否かを継承クラスは、許可されていない非抽象クラスを実装しているかどうか、その親クラスまたはインタフェースの実装要件のすべての方法、かカバーされた親最後のフィールド、およびオンそう。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
バイトコード検証
この段階により、データフローおよび制御フロー解析プログラムは、論理的、法的な意味論であることを確実にします。たとえば、次の一致を保証するために使用されるスタックデータ型と操作を確定する場合、そのボディ型変換方法のような効果的であることを確認するために、メソッド本体以外のバイトコード命令にジャンプするジャンプ命令を保証するものではありません。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
シンボリック参照チェック
この段階では、それが中に発生型自体(様々な記号定数プール参照)照合以外の情報である解析、ステップ確実にするために、分析などの通常の実行、:の文字列によって定義される基準シンボルをフル説明あなたは、対応するクラスの名前を見つけることができれば、シンボリック参照のクラスフィールドのアクセス方法は、現在のクラスにアクセスし、というようにできるかどうか。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
レディ
この段階では、静的変数のメモリを割り当て、静的変数の初期値を設定します。通常の場合、ここで初期値、コードの初期値が書き込まれていないが、データ型のゼロ値。コードは、初期値を書かれた初期の割り当て相。それは静的定数(最終的な変形)である場合、この段階は、直接書き込みコード初期値に割り当てられます。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
解決
この段階で、定数プールへのJVMシンボリック参照は直接参照に置き換えられます。参照、リテラルシンボルに記載のシンボルの特定のセットへのシンボル参照は、任意の形態で、明確に限りとして使用することができるターゲットに配置することができることができる、それは無関係であり、メモリレイアウトJVM実装。直接参照は、ターゲットへの直接のポインタ、相対オフセットまたは間接的にターゲットを処理するために標的とすることができる、それが依存JVM実装レイアウトのメモリです。あなたが直接参照を持っている場合は、目標基準は、メモリ内に存在している必要があります。
主に、それぞれ定数プールCONSTANT_Class_info、CONSTANT_Fieldref_info、CONSTANT_Methodref_info、CONSTANT_InterfaceMethodref_info、CONSTANT_MethodType_info、CONSTANT_MethodHandle_infoとCONSTANT_InvokeDynamic_infoに対応するクラスまたはインタフェース、フィールド、メソッド、クラス、インタフェースメソッド、タイプの方法、及びシンボリック参照点修飾子方法ハンドルコールの分析。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
初期化
本当にクラスのバイトコードで定義された初期化フェーズを開始するだけでなく、クラスのコンストラクタを実行します
JVMは、そのサブクラスを保証します
JVMは、クラスを保証します
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。
エピローグ
今回はつまり、いくつかの段階のクラスローディング過程を知っているロード、検証、準備、分析、および初期化。ローディングは、メモリにバイナリバイトコードであり、認証の際に、チェックバイトストリームに含まれる情報は、要件を満たして準備するために静的変数と静的変数の初期値設定として割り当てられたメモリを、解析はシンボリック参照定数プールを交換することです、直接引用された初期化はブロック内のすべての動きと静的変数静的代入文の文が実行されます。
マイクロチャンネル公衆番号へようこそ注意:ワンキャット協会、共有Javaテクノロジは、毎週乾燥させます。