jvm學習一,類加載

首先java文件打包成.class文件
Hello.java -> 打包 -> Hello.class ->類加載 -> jvm中

加載過程,加載 ->驗證 ->準備 ->解析 ->初始化

加載:就是講.class通過類加載加載到jvm中
驗證:驗證文件是否可用,是否合法
準備:給類或者類變量等等分配內存空間
解析:這個不太懂
初始化:執行一些靜態代碼。初始化類的時候,如果父類沒有被初始化,那麼一定先初始化他的父類

類加載器

類加載器有三個
Bootstrap ClassLoader:啓動類加載器。 負責加載jre的lib目錄下核心類庫
Extension ClassLoader:擴展類加載器。 負責加載lib/ext下的擴展類庫
Application ClassLoader:應用程序類加載器。負責加載java代碼
還可以自己自定義類加載器

雙親委派

層級關係:Bootstrap ClassLoader -> Extension ClassLoader ->Application ClassLoader -> 自定義類加載器

應用程序類加載器要加載一個類,他會先委派給自己的父類加載器去加載,父類加載器會再委派給自己的父類去尋找

需要加載一個類 -> Application ClassLoader向上傳導 -> Extension ClassLoader 向上傳導 -> Bootstrap ClassLoader

啓動類加載器發現我找不到,然後向下傳導給擴展類加載器,擴展類加載器也找不到向下傳導給應用程序類加載器,應用程序類加載器發現自己可以加載,然後就自己加載了
如果向上傳導的過程中,某一個父類加載器發現自己已經加載過了,就不用再向上傳導了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章