java類的加載過程
jvm的核心類加載器
什么是雙親委派
啟動jvm.dll文件啟動java虛擬機(jī)---》創(chuàng)建一個類加載器(c++)---》c++調(diào)用java代碼啟動sun.miscLauncher實(shí)列,然后通過這個實(shí)例啟動很多java類加載器---》獲取自己的加載器classloder,是AppClassLoder的實(shí)例(launcher.getClassLoder())---》運(yùn)行指定的類文件---》調(diào)用main方法啟動---》運(yùn)行程序---》jvm銷毀
類的加載:驗(yàn)證,準(zhǔn)備,解析,初始化jvm,加載使用
驗(yàn)證:驗(yàn)證字節(jié)碼的準(zhǔn)確性
準(zhǔn)備:給類的靜態(tài)變量分配內(nèi)存,并賦予默認(rèn)值
解析:將符號引用轉(zhuǎn)變?yōu)橹苯右茫ㄖ赶驍?shù)據(jù)存儲在內(nèi)存中的指針或句柄)
初始化:對類的靜態(tài)變量初始化為指定的值,執(zhí)行靜態(tài)代碼塊
運(yùn)行時常量池,類型信息,字段信息,方法信息,類加載器的引用,對應(yīng)class實(shí)例的引用
引導(dǎo)類加載器:負(fù)責(zé)加載支撐jvm運(yùn)行的位于jre的lib目錄下的核心類庫,不如rt。jar,charsets.jar等
擴(kuò)展類加載器:負(fù)責(zé)加載支撐jvm運(yùn)行的位于jre的lib下的ext擴(kuò)展目錄下的jar包
應(yīng)用程序類加載器:負(fù)責(zé)加載classPash路徑下的jar包,主要是加載自己寫的類
自定義類加載器:負(fù)責(zé)加載用戶自定義路徑下的類包