【HotSpot仮想マシンの理解】クラスのロードメカニズム
4104 ワード
転載は出典を明記してください.http://blog.csdn.net/linxdcn/article/details/73555233
1概要
仮想マシン仕様では、定義されたクラス(classファイル)が仮想マシンによってメモリにロードされ、3つのプロセスが経過しました.ロード(Loading) 接続(Linking) 検証(Verification) 準備(Preparation) 解析(Resolution) 初期化(Initialization) その後、このクラスは使用されます.インスタンス化(Instantiation) 次に、クラスのロードメカニズムを次のクラスで説明します.
2ロードクラスの全制限名に従ってclassファイルを見つけ、classファイルバイナリデータストリーム を形成する初歩検査、例えばclassファイルの魔数、主次バージョン番号、アクセスIDなど このバイナリデータストリームをinstanceKlassオブジェクトとして解析し、メソッド領域に保存する このタイプのjavaを作成する.lang.Classインスタンス、スタックに保存
3接続
3.1検証
検証は接続の最初のステップであり、検証は4つのフェーズに分けられます.ファイルフォーマット検証(前のステップ:ロードで実装) メタデータ検証 バイトコード検証 シンボル参照検証 詳細については、「仮想マシン仕様」と「Java仮想マシンの理解」を参照してください.
このステップのメソッド領域とスタック領域には変化はありません.
3.2準備
準備フェーズは、クラス変数(静的変数)にメモリを割り当て、静的変数にデフォルトの初期値を割り当てます.インスタンス変数ではありません.
デフォルトの初期値は次のとおりです.
データ型
デフォルト初期値
データ型
デフォルト初期値
int
0
boolean
false
long
0L
float
0.0f
short
(short)0
double
0.0
char
‘\u0000’
reference
null
byte
(byte)0
3.3解析
解析は、仮想マシンが定数プール内のシンボル参照を直接参照に置き換え、直接参照は、ターゲットへのポインタ、相対オフセット、ターゲットに位置決めできるハンドルであってもよい.
4初期化
クラス変数に指定された初期値を付与し、初期化フェーズはクラスコンストラクタ静的変数の付与動作 静的文ブロック内の文
5インスタンス化
クラスのオブジェクトインスタンスを作成します.インスタンス化は、クラスの初期化後、スタックにクラスを作成するオブジェクトです.
クラスの初期化は、祖先クラスからサブクラスに、出現順にクラス変数の初期化文、静的初期化文ブロックを順次初期化します.クラスインスタンスの初期化も同様で、祖先クラスからサブクラスまで、出現順にクラスメンバーの初期化文、インスタンス初期化ブロック、構築方法を順次初期化します.
転載は出典を明記してください.http://blog.csdn.net/linxdcn/article/details/73555233
1概要
仮想マシン仕様では、定義されたクラス(classファイル)が仮想マシンによってメモリにロードされ、3つのプロセスが経過しました.
public class ClassDemo {
public static int a = 1;
static {
System.out.println("initialized");
}
public int b = 2;
public ClassDemo() {
System.out.println("constructed");
}
}
2ロード
3接続
3.1検証
検証は接続の最初のステップであり、検証は4つのフェーズに分けられます.
このステップのメソッド領域とスタック領域には変化はありません.
3.2準備
準備フェーズは、クラス変数(静的変数)にメモリを割り当て、静的変数にデフォルトの初期値を割り当てます.インスタンス変数ではありません.
デフォルトの初期値は次のとおりです.
データ型
デフォルト初期値
データ型
デフォルト初期値
int
0
boolean
false
long
0L
float
0.0f
short
(short)0
double
0.0
char
‘\u0000’
reference
null
byte
(byte)0
3.3解析
解析は、仮想マシンが定数プール内のシンボル参照を直接参照に置き換え、直接参照は、ターゲットへのポインタ、相対オフセット、ターゲットに位置決めできるハンドルであってもよい.
4初期化
クラス変数に指定された初期値を付与し、初期化フェーズはクラスコンストラクタ
()
メソッドを実行するプロセスであり、()
メソッドはコンパイラによって順次収集される5インスタンス化
クラスのオブジェクトインスタンスを作成します.インスタンス化は、クラスの初期化後、スタックにクラスを作成するオブジェクトです.
クラスの初期化は、祖先クラスからサブクラスに、出現順にクラス変数の初期化文、静的初期化文ブロックを順次初期化します.クラスインスタンスの初期化も同様で、祖先クラスからサブクラスまで、出現順にクラスメンバーの初期化文、インスタンス初期化ブロック、構築方法を順次初期化します.
転載は出典を明記してください.http://blog.csdn.net/linxdcn/article/details/73555233