類加載過程
類加載過程有:加載、連接(驗(yàn)證雄人、準(zhǔn)備从橘、解析)念赶、初始化、使用恰力、卸載
- 加載:將class文件加載到方法區(qū)叉谜,然后在堆中生成對(duì)應(yīng)的class對(duì)象
- 驗(yàn)證:對(duì)class靜態(tài)結(jié)構(gòu)進(jìn)行驗(yàn)證,包括元數(shù)據(jù)踩萎、字節(jié)碼進(jìn)行驗(yàn)證停局,確保class是安全的
- 準(zhǔn)備:對(duì)class中的靜態(tài)屬性賦默認(rèn)值
- 解析:將符號(hào)引用解析成直接引用(靜態(tài)解析,多態(tài)的動(dòng)態(tài)解析是發(fā)生在初始化之后運(yùn)行階段)
-
初始化:主動(dòng)資源初始化香府,對(duì)class中的成員變量董栽、靜態(tài)變量、靜態(tài)代碼塊初始化
類加載過程
類加載器
類加載器有:?jiǎn)?dòng)類加載器企孩、擴(kuò)展類加載器锭碳、應(yīng)用程序類加載器、自定義類加載器
- 啟動(dòng)類加載器:加載核心類庫的類勿璃,/jre/lib目錄下的jar包
- 擴(kuò)展類加載器:加載擴(kuò)展庫目錄的類擒抛,/jre/lib/ext目錄下的jar包
- 應(yīng)用程序類加載器:當(dāng)前java應(yīng)用classpath中的類
- 自定義類加載器:繼承ClassLoader,打破雙親委派补疑,需要實(shí)現(xiàn)loadClass方法歧沪;否則實(shí)現(xiàn)findClass方法
雙親委派機(jī)制
類的加載滿足雙親委派機(jī)制,每個(gè)類加載器收到類加載請(qǐng)求時(shí)莲组,會(huì)先委派給父類加載器進(jìn)行加載诊胞,當(dāng)父類加載器無法加載類時(shí),自己才會(huì)嘗試去加載锹杈。
雙親委派模型的好處有:防止核心庫被篡改撵孤;避免類的重復(fù)加載。
雙親委派機(jī)制