參考來源
- 虛擬機類加載機制,很完整,沒有錯誤
- [JVM如何加載一個類的過程]https://my.oschina.net/hosee/blog/652410
- 這句話是錯的
- image.png
- JVM ( java virtual machine) architecture - tutorial
加載步驟
- 標題中加載是一個廣義的概念
- 主要包含三個主要步驟:加載(狹義的概念)、鏈接、初始化
- 其中鏈接又分為三個步驟:驗證、準備、解析
- image.png
- image.png
- image.png
- image.png
- image.png
- image.png
加載階段(狹義)
- 根據類的完全限定名獲取類的二進制字節流
- 根據字節流將類的靜態結構轉化為方法區的運行時結構
- 在內存中生一個代表這個類的Class對象,作為方法區這個類的入口(通過這個class對象訪問第二步的運行時結構)。雖然Class對象是對象類型,但在HotSpot虛擬機中,Class對象并沒有放在java堆而放在了方法區
注意:一個類必須與類加載器一起確定唯一性,而每一個類加載器都擁有一個獨立的類名稱空間
- 數組加載階段,與類加載階段有所不同,數組加載先根據數組類的元素類型進行類型加載,如果元素類型是引用類型則先加載類,加載步驟與上面的類加載階段相同并把數組標識在該類加載器的命名空間中,如果元素類型不是引用類型(如int [])則該數組則由引導類加載器關聯,而數組類本身則由Java虛擬機直接創建。