JVM學習筆記9: 類加載器深入解析及重要特性剖析

1、整個類的加載過程:來自課程

2、Class對象

Class對象封裝了雷災方法區內的數據結構,並且向Java程序員提供了訪問方法區內的數據結構的接口(這也是反射機制的原因)

3、類的加載

3.1 Java虛擬機自帶的加載器

根類加載器(Bootstrap)

擴展類加載器(Extention)

系統(應用)類加載器(System)

 

3.2 用戶自定義的類加載器

Java.lang.ClassLoader  的子類

用戶可以定製類的加載方式

4、類加載器並不需要等到某個類主動使用手時再加載他(MyTest1 就說明了這個 -XX:+TraceClassLoading)

JVM 規範允許類加載器在預料某個類將要被使用時就預先加載它,如果在預先加載的過程中遇到了。class文件缺失或存在錯誤,類加載器必須在程序首次主動使用該類時才報告錯誤(LinkageErro 錯誤)

如果這個類一直沒有被程序主動使用,那麼類加載器就不會報告錯誤

5、連接就是將已經讀入到內存的類的二進制數據合併到虛擬機的運行時環境中去。

類的驗證:類的文件的結構檢查、語義檢查、字節碼驗證、二進制兼容性的驗證

類的準備階段:爲類的靜態變量分配內存,並設置默認的初始值

類的初始化:爲類的靜態變量初始化,靜態tade變量和靜態代碼塊都被看做初始化語句,按照順序執行就可以。

6、當Java 虛擬機初始化一個類時,要求所有父類都初始化,但是這條規則並不適用於接口。

在初始化一個類的時候,並不會先初始化它所實現的接口。

在初始化一個接口時,並不會先初始化他得父接口

因此一個父接口並不會因爲它的子接口或者實現類的初始化而初始化。只有當程序首次使用特定接口的靜態變量時,纔會導致接口的初始化。---例子mytest5

7、雙親委託機制

根類加載器<---擴展類加載器<---系統類加載器<---用戶自定義加載器 【看似繼承成,實則是包含的關係】

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