類加載過程java
一、加載c++
二、驗證學習
三、準備繼承
四、解析虛擬機
五、初始化io
雙親委派模型擴展
從Java虛擬機的角度來說,只存在兩種不一樣的類加載器:一種是啓動類加載器(Bootstrap ClassLoader),這個類加載器使用c++語言實現,是虛擬機自身的一部分;另外一種就是全部其餘的類加載器,這些類加載器都由Java語言實現,獨立於虛擬機外部,而且所有都繼承自抽象類java.lang.ClassLoader請求
雙親委派模型
一、啓動類加載器(Bootstrap ClassLoader):這個類加載器負責加載<JAVA_HOME>lib目錄中的。程序
二、擴展類加載器(Extension ClassLoader):這個類加載器負責加載<JAVA_HOME>libext目錄中的。語言
三、應用程序類加載器(Application ClassLoader):這個類加載器負責加載用戶類路徑上所指定的類庫。
雙親委派模型的工做過程:
若是一個類加載器收到類加載請求,首先它不會本身嘗試去加載這個類,而是把加載請求委派給父類加載器去完成,每個層次的類加載器都是如此,不管哪個類加載器請求加載最終都會委派給最頂層的啓動類加載器進行加載。只有當父類加載器反饋本身沒法完成加載時,子類纔會嘗試本身去加載。
這樣有一個顯而易見的好處就是Java類隨着它的類加載器一塊兒具有了一種有優先級的層次關係。例如java.lang.Object,它存放在rt.jar中,不管哪一個類加載器進行加載最終都會委派給頂層啓動類加載器進行加載,所以Object類在程序的各類類加載器中都是同一個類。
歡迎加入學習交流羣569772982,你們一塊兒學習交流。