1. 程式人生 > >深入了解java虛擬機---類加載機制----加載

深入了解java虛擬機---類加載機制----加載

-- 完成 自定義 jar 進行 java虛擬機 int 重寫 內容

加載是類加載的一個階段。不要弄混淆了

這一階段主要做了下面三件事。
1.通過一個類的全限定名獲取此類的二進制流

2.將這個二進制流代表的靜態存儲結構轉化為方法區的運行時數據結構

3.在內存中生成java.lang.Class對象,作為訪問入口

.通過一個類的全限定名獲取此類的二進制流:這一步說的不明確,要怎樣獲取呢。java虛擬機沒有指明。所以就產生了很多種獲取方法

1.從zip,jar,war包獲取

2.從網絡中獲取

3.運行時生成,如動態代理

4.有其他文件生成 如jsp

5.從數據庫中獲取,這我還沒理解。先放著吧

加載分為加載非數組類和數組類:

加載非數組類,可以使用系統的類加載器,也可以自定義類加載器(即重寫loadClass()方法)

加載數組類,數組的組件類型時引用類的采用遞歸加載這個組件類型。數組在該類的類加載器的類名稱空間上被標識

數組的組件類型不是引用類(如int[]),那麽數組就與引導類加載器關聯

順便一提

數組類的可見性和組件類型可見性一致,組件類型不是引用類型就直接默認為public

加載完成後,二進制字節流存儲在方法區中,然後堆中生成Java.lang.Class對象。

最後說下加載和連接部分內容是交叉進行的,但是加載還是在連接前面

深入了解java虛擬機---類加載機制----加載