類加載機(jī)制

一. 類的生命周期

加載,驗證,準(zhǔn)備,解析,初始化,使用,卸載

  • 加載:通過類名獲取二進(jìn)制字節(jié)流;轉(zhuǎn)為方法區(qū)運行時數(shù)據(jù)結(jié)構(gòu);生成.class
  • 準(zhǔn)備時分配內(nèi)存
  • 解析:符號引用->直接引用
  • 加載,驗證,準(zhǔn)備,初始化,卸載 開始順序一定

初始化條件(初始化前做加載,驗證,準(zhǔn)備):

  1. new對象,get/put static變量,調(diào)用static方法
  2. 反射
  3. 初始化子類時,先初始化父類
  4. 啟動main類,main類先初始化
  5. 動態(tài)語言支持,方法對應(yīng)的類

二. 雙親委派模型

每個類加載器都有父類;
一個類加載收到類加載請求,先委派給父類加載器,先到頂層,然后在向下。

  1. Bootstrap ClassLoader 啟動類加載器
    加載\lib中類庫到虛擬機(jī)內(nèi)存
  2. Extension ClassLoader 擴(kuò)展類加載器
    加載\lib\ext中類庫 (開發(fā)可用)
  3. Application ClassLoader 應(yīng)用程序類加載器
    系統(tǒng)類加載器,加載ClassPath上指定類庫(開發(fā)可用)
  4. 自定義加載器(繼承ClassLoader)

目的:有了優(yōu)先級層次關(guān)系,防止重復(fù)加載。

  • 如何破壞雙親委派
    類加載邏輯寫到findClass()中,父類loadClass失敗會調(diào)用子類findClass
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容