類加載過程
類加載過程有:加載、連接(驗證、準備、解析)、初始化、使用、卸載
- 加載:將class文件加載到方法區(qū),然后在堆中生成對應(yīng)的class對象
- 驗證:對class靜態(tài)結(jié)構(gòu)進行驗證,包括元數(shù)據(jù)、字節(jié)碼進行驗證,確保class是安全的
- 準備:對class中的靜態(tài)屬性賦默認值
- 解析:將符號引用解析成直接引用(靜態(tài)解析,多態(tài)的動態(tài)解析是發(fā)生在初始化之后運行階段)
-
初始化:主動資源初始化,對class中的成員變量、靜態(tài)變量、靜態(tài)代碼塊初始化
類加載過程
類加載器
類加載器有:啟動類加載器、擴展類加載器、應(yīng)用程序類加載器、自定義類加載器
- 啟動類加載器:加載核心類庫的類,/jre/lib目錄下的jar包
- 擴展類加載器:加載擴展庫目錄的類,/jre/lib/ext目錄下的jar包
- 應(yīng)用程序類加載器:當前java應(yīng)用classpath中的類
- 自定義類加載器:繼承ClassLoader,打破雙親委派,需要實現(xiàn)loadClass方法;否則實現(xiàn)findClass方法
雙親委派機制
類的加載滿足雙親委派機制,每個類加載器收到類加載請求時,會先委派給父類加載器進行加載,當父類加載器無法加載類時,自己才會嘗試去加載。
雙親委派模型的好處有:防止核心庫被篡改;避免類的重復加載。
雙親委派機制