一、類加載過程有5步,如圖:
java
3)、準備:爲類變量(即static修飾的字段變量)分配內存而且設置該類變量的初始值爲0
4)、解析:虛擬機將常量池內的符號引用替換爲直接引用的過程;
符號引用(編譯以後的UTF-8就是符號引用):一組符號來描述目標,能夠是任何字面量;
直接引用:直接指向目標的指針、相對偏移量或一個間接定位到目標的句柄。有類或接口的解析,字段解析,類方法解析,接口方法解析
5)、初始化:給static變量賦值以及執行靜態代碼塊。
api
二、類加載器 安全
1)、引導(Bootstrap)類加載器(C++語言實現):三、雙親委派機制:
工做原理若是一個類加載器收到了類加載請求, 它並不會本身先去加載,而是把這個請求委託給父類的加載器去執行, 若是父類加載器還存在其父類加載器,則進一步向上委託,依次遞歸, 請求最終將到達頂層的啓動類加載器,若是父類加載器能夠完成類加載任務,就成功返回, 假若父類加載器沒法完成此加載任務,子加載器纔會嘗試本身去加載,這就是雙親委派模式。
優缺點:
好處:
1)、Java類隨着它的類加載器一塊兒具有了一種帶有優先級的層次關係, 經過這種層級關能夠避免類的重複加載,當父親已經加載了該類時,就沒有必要子ClassLoader再加載一次;
2)、保證java核心庫的安全性,java核心api中定義類型不會被隨意替換。
spa
以爲不錯,歡迎給一個贊!謝謝!指針