1. 程式人生 > >深入理解java虛擬機,類加載

深入理解java虛擬機,類加載

深入理解java nal ava 直接 成員 進制 地址 lang 變量賦值

1,通過使用靜態字段,只有真正定義這個字段的類才會被初始化,(子類不初始化,父類初始化

2,new數組,不初始化

3,通過類來調用一些類的常量,可以不初始化類,(常量在編譯期,被優化到NotInitialization類,成為了他的引用,所以可以不初始化

4,類和接口的初始化必要條件不同的是,接口可以不初始化父類的接口

5,加載:

  1)通過一個類的全限定名獲得一個類的二進制字節流

  2)把這個類的靜態存儲結構轉存在方法區的運行時數據結構(運行時常量池?

  3)在java.lang.Object初始化一個類的對象,作為方法區的入口

6,驗證:重要不是必要

  1)class文件格式檢驗

  2)元數據檢驗,是否有父類,final

  3)字節碼驗證,方法體裏面的操作

  4)符號引用的檢驗

7,準備:成員變量0值(final除外

技術分享圖片

8,解析:字符引用-》直接引用

  1)字符引用:和內存分布無關,所有引用目標不一定加載到內存中

  2)直接引用:由字符引用翻譯,有直接的內存地址

9,初始化,顯式成員變量賦值

10,類和類加載器,只有類加載器相同,才是同一個類

深入理解java虛擬機,類加載