天天看點

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

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

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

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、雙親委托機制

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

繼續閱讀