這個(gè)系列前思后想最后定位在了收藏不看系列,因?yàn)橹暗暮芏喾窒矶紱]有太多小伙伴給我反饋,而且很多都是收藏之后再也不會(huì)翻出手機(jī)再看一遍裁眯,所以決定這個(gè)系列就起了這么個(gè)名字。
JVM之類加載
JVM是Java最為核心的知識點(diǎn)讳癌,而且最為核心的設(shè)計(jì)理念穿稳。這一期分享的類屬于所有JVM的基石,也就是說沒有類的加載晌坤,那么就沒有JVM后續(xù)的一切逢艘。
類加載器
類加載過程
加載
- 通過全限定名稱獲取類的二進(jìn)制字節(jié)碼
- 字節(jié)碼中的所有靜態(tài)內(nèi)容存儲(chǔ)到方法區(qū)中(運(yùn)行時(shí)數(shù)據(jù))
- JVM中生成一個(gè)java.lang.Class的對象,存儲(chǔ)到方法區(qū)中
PS:這里還涉及到一個(gè)知識點(diǎn)(雙親委派模型)骤菠,之后會(huì)單獨(dú)提出一次跟大家分享
驗(yàn)證
- 文件格式驗(yàn)證
- 元數(shù)據(jù)驗(yàn)證
- 字節(jié)碼驗(yàn)證
- 符號引用驗(yàn)證
準(zhǔn)備
- 準(zhǔn)備階段時(shí)這個(gè)是為類變量分配方法區(qū)并設(shè)置初始值
解析
將常量池內(nèi)的符號引用替換為直接引用它改。
- 類、接口解析
- 字段解析
- 類方法解析
- 接口方法解析
初始化
這個(gè)初始化與準(zhǔn)備階段中的設(shè)置初始值是不同的概念商乎,這里的初始化是根據(jù)程序制定的規(guī)則進(jìn)行初始化類變量與其他資源(靜態(tài)代碼塊等)
使用
這個(gè)階段理解起來非常簡單央拖,就是寫程序中使用的類創(chuàng)建對象,調(diào)用類方法等操作鹉戚,這些都是使用階段鲜戒。
卸載
這個(gè)階段也不需要過多解釋了,一般這個(gè)階段會(huì)在我們開發(fā)一些相對動(dòng)態(tài)靈活的代碼的時(shí)候可能會(huì)用到抹凳,比如:維護(hù)一個(gè)自定義的Class Loader袍啡,那么加載自定義類之后不再使用了,就需要將這些類進(jìn)行卸載却桶,在這個(gè)時(shí)候就到了這個(gè)段境输。
總結(jié)
這期主要是跟大家分享概念性的東西,希望大家可以對感興趣的部分進(jìn)行查詢資料颖系,之后會(huì)對每個(gè)階段進(jìn)行比較詳細(xì)的分享嗅剖。多謝關(guān)注評論交流。