jvm學習筆記-類加載機制以及加載過程

1.類加載

理論一: 在java代碼中,類(class)的加載、連接、初始化過程都是在程序運行期間完成的。(還有使用與卸載【將類從內存中釋放出來OSGI技術】)
我的理解: class類就是泛指java代碼編譯後生成的字節碼文件。當然其他語言編譯後也可以生成class類文件(不擡槓)。一個類並不是指一個class文件,但是一個class文件裏面肯定會至少有一個類。類的的加載、連接、初始化。我的理解是就跟拼積木或者組裝一輛賽車一樣。加載就相當於把賽車的零部件(類)從包裝裏拆出來放到桌子(內存)上。類的連接就相當於梳理零部件。把零部件的關係梳理清楚。那些可以組裝成底盤(靜態代碼塊等),哪些可以組裝成驅動裝置。初始化就相當於是組裝好了。做後面的塗裝或者加潤滑油等操作。
以上是在運行期間(run time)完成的。這樣一種機制是的java的擴展性大大提高。jvm可以更方便的兼容其他語言,只要是你按照我的規範編譯的class類。

理論二: 類加載器(classLoader)加載類的工具類。
我的理解: 類相當於是一個一個砍伐好的樹木,類加載器就相當於運輸樹木的大卡車。什麼時候加載那些類都是有jvm控制的。

理論三: java虛擬機與程序的生命週期
在以下情況下,java虛擬機將結束其生命週期(STW)。
1.執行了System.exit()方法;
2.程序正常執行結束;
3.程序在執行過程中遇到了異常(Exception)或錯誤(Error)導致中止。
4.由操作系統異常導致jvm進程結束。
理論四: 類的加載、連接、初始化;
類的加載:查找並加載類的二進制數據;
類的連接:驗證:確保被加載的類的正確性。
準備:爲類的靜態變量分配內存並將其初始化爲默認值。
解析:把類中的符號引用轉換爲直接引用。
初始化:爲類的靜態變量賦予正確的初始值。
我的理解: 類的加載與初始化不用說都是字面意思理解就行。類的連接又分爲驗證階段:確保加載的類都是正確的。因爲即使編譯成class文件也是會有被篡改的風險。所以在這一部校驗。準備階段就是把所有類的靜態變量分配內存地址並加載進來。然後將其初始化成默認值。比如int a =123; 那麼a就初始化成了0.在解析階段被賦予了123. 符號引用與直接引用有疑惑。後續再理解。
理論五: java程序對類的使用方式有兩種 主動使用與被動使用。
理論六: 類加載: 類加載是指將class文件中的二進制數據讀入到內存中,將其放在運行時數據區的方法區內,然後在內存中創建一個java.lang.Class對象用來封裝類在方法區內的數據結構。
我的理解: 類的加載加載的是class文件的中的二進制數據。而不是二進制文件。把數據讀入到內存中放到運行時數據區內。然後會在內存中創建一個class對象來對這個類進行肢解。數據結構方法體、變量、實例等。

類加載這塊裏面的內容感覺跟編原裏的概念很相似。如果有上過編原的課,這些概念會很好理解。概念很枯燥只有通過理解記筆記的形式來記憶這一塊。但是理解了以後記憶就沒那麼難了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章