Hello類的JVM載入過程
阿新 • • 發佈:2018-12-10
1 待解析例子
public class Hello {
private static String name="test";
private int age = 10;
public static void main(String[] args) {
Hello hello = new Hello();
}
}
2 載入的過程
第一步 類載入器先將位元組碼檔案Hello.class載入到JVM的方法區中,並且經過了(載入、驗證、準備、解析、初始化)步驟。
-
準備階段:將類變數初始化,這裡name是類變數,所以在準備階段初始化為null,如byte=0, short=0, int=0, long=0L, char=' ', boolean=false, float=0.0f, double=0.0d, 引用型別=null。
-
初始化階段:將設定的值賦給類變數,比如將類變數name在初始化階段設定為"test"(符號引用轉為地址引用,指向常量池)。
第二步 在方法區載入Hello,找到main方法,會將main方法載入到執行緒棧中,並且執行main方法。
第三步 執行緒棧main中解析碰到了new關鍵字會執行如下操作。
第四步 執行緒棧中宣告物件Hello hello。
-
堆中建立物件的執行過程
-
1 載入例項變數如age進入開闢的記憶體中。
-
將例項變數age 載入入開闢好的記憶體中。
-
初始化age=0。
-
初始化age=10。
-
執行構造方法如下2
-
-
2 執行構造方法就是<init>方法。
-
第五步 在JVM堆中申請一片記憶體空間,將Hello相關資訊如例項變數、例項方法等從方法區載入到堆記憶體中。
第六步 將物件的宣告hello(即物件引用)指向堆記憶體中開闢的物件。
參考自Q群:Java交流討論一群(250431014)-群主的幫助