JVMの深い理解:クラスロード処理

まず、ライフサイクルの種類

前記初期化処理後の接続位相位置まとめ大型ボックスは、解決することができます。

第二に、クラスのロード処理

1、ロード

クラスローディングのプロセスの最初のステップは、主に以下の3つのことを完了するために:

  1. このようなことは、バイナリバイトストリームの完全なクラス名で定義されて取得します
  2. ランタイムデータ構造領域法に代表されるバイトストリームの静的記憶構造を変換します
  3. そのようなデータ入力領域へのアクセスの方法として、メモリ内のクラスのクラスオブジェクトの代表を生成します

一つの非ローディングフェーズ・アレイ・クラス(クラスローディングフェーズ取得動作バイナリバイトストリーム)は、我々はまた、バイト・ストリームを取得する方法を制御するためのクラスローダをカスタマイズすることができ、この手順を完了するために、制御可能な最強の段階であります(クラスローダをオーバーライド  loadClass() メソッド)。配列型は、Java仮想マシンによって直接作成されたクラスローダによって作成されていません。

ローディング段階が完了した後、JVMは、バイトのバイナリストリームに従った方法の領域で所望のフォーマットを格納します。

ロード・フェーズとクロスのための接続フェーズ。

2、検証

このフェーズでは、負荷のJVMクラスのワークロード・サブシステムの検証段階の面で実行パフォーマンスから悪意のある攻撃に耐えることができ、JVMはそれの一部を占めているかどうかを判断します。

éªè¯é¶æ®μ示æå¾

3、準備フェーズ

正式クラス変数およびクラス変数にメモリを割り当てる段階の初期値を設定します。

(1)メモリ割り当てクラス変数(静的)を含みます。

(2)クラスタイプの初期値は、通常、ゼロのデフォルト値です。

4、構文解析

JVM記号定数プールは(メモリにおけるクラスのメソッド・ポインタ・フィールド、オフセット)参照への直接参照プロセスによって置き換えられます。

主クラスまたはインタフェース、フィールド、メソッド、クラス、インタフェースメソッド、タイプ法、及び7つのシンボリック参照メソッドハンドルクラスの修飾子を呼び出すため。

5、初期化

これは、最後のクラスローディングステップで、これは実際の実装クラス実行クラスコンストラクタ<clinit>メソッドの手順で定義されるJavaプログラムコード(バイトコード)です。

<Clinit>コピー操作が自動的にすべての変数とステートメントの静的クラスステートメントブロックの合併のコレクションをコンパイルしています。

公開された134元の記事 ウォン称賛91 ビュー160 000 +

おすすめ

転載: blog.csdn.net/weixin_44588495/article/details/104126638