1. 程式人生 > >深入拆解類載入器,這樣的姿勢你還不懂嗎?

深入拆解類載入器,這樣的姿勢你還不懂嗎?

本文導讀:

1、前奏,舉個生活中的小栗子

2、為何Java型別載入、連線在程式執行期完成?

3、一個類在什麼情況下才會被載入到JVM中?

什麼是主動使用、被動使用?程式碼示例助你透徹理解類初始化的時機。

4、類的載入(Loading)內幕透徹剖析

類載入做的那些事兒、雙親委派模型工作過程、ClassLoader原始碼解析

5、Tomcat如何打破雙親委派模型的

6、上下文類載入器深入淺出剖析

7、最後總結

1、前奏,舉個生活中的小栗子

春節馬上要到了,大家是不是都在迫不及待的等著回家團圓了呢?

大春運早已啟動,回家的過程其實是個「辛苦活」,有的同學還沒有買到票呢,矇眼狂奔終於搶到了,發現竟然是個站票~,退了,連站票的機會都沒了吧?

昨天還聽一位同學說:『嘿嘿,去年我提前就買到票了,但是... 但是... 去錯火車站了。。。尼瑪,當時那是啥心情啊~ 幸運的是後來又刷到票了,不然就真回不去了!』

回家大部分朋友都要乘坐交通工具,不管你乘坐什麼樣的交通工具出行,對於「交通管理」內部來說,最最重要的任務就是保障大家得出行安全。

那麼如何保障大家的出行安全呢?

乘坐地鐵、飛機等這些公共交通工具,必不可少的最重要的環節就是『安檢』,不是什麼東西都可以隨便讓你帶的,都是有明文規定的,比如易燃易爆、酒類等都是有限制的。

交通出行的大體過程,有點類似類檔案載入到Java虛擬機器(簡稱 JVM)的過程,程式中執行的各種類檔案(比如Java、Kotlin),也是要必須經過『安檢』的,才能允許進入到JVM中的,一切都是為了安全。

當然,安檢的標準是不同的。

接下來,我們進入正題,一起來看看類檔案是如何被載入到JVM當中的。

上圖的對比只是為了方便理解 ,抽象出來一層『安全檢查』,其實就是『類載入』的過程。
這個過程JVM當中約束了規範和標準,都會經過載入、驗證、準備、解析、初始化五個階段。

這裡一定要說一個概念,個人認為對於理解類載入過程挺重要的。

更準確的說法,應該是型別的載入過程,在Java程式碼中,型別的載入、連線、初始化都是在程式執行時完成的。

這裡的型別,是指你在開發程式碼時常見的class、interface、enum這些關鍵字的定義,並不是指具體的class物件。

舉個