1. 程式人生 > >Hello類的JVM載入過程

Hello類的JVM載入過程

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)-群主的幫助