雙親委派模式要求除了頂層的啟動類加載器外,其餘的類加載器都應當有自己的父類加載器
,請注意雙親委派模式中的父子關係並非通常所說的類繼承關係,而是採用組合關係來複用父類加載器的相關代碼,類加載器間的關係如下:
TIM截圖20190116163949.png
雙親委派模式是在Java 1.2後引入的,其工作原理的是,如果一個類加載器收到了類加載請求,它並不會自己先去加載,而是把這個請求委託給父類的加載器去執行,如果父類加載器還存在其父類加載器,則進一步向上委託,依次遞歸,請求最終將到達頂層的啟動類加載器,如果父類加載器可以完成類加載任務,就成功返回,倘若父類加載器無法完成此加載任務,子加載器才會嘗試自己去加載,這就是雙親委派模式3 雙親委派模式優勢
採用雙親委派模式的是好處是Java類隨著它的類加載器一起具備了一種帶有優先級的層次關係,通過這種層級關可以避免類的重複加載,當父親已經加載了該類時,就沒有必要子ClassLoader再加載一次。其次是考慮到安全因素,java核心api中定義類型不會被隨意替換,假設通過網絡傳遞一個名為java.lang.Integer的類,通過雙親委託模式傳遞到啟動類加載器,而啟動類加載器在核心Java API發現這個名字的類,發現該類已被加載,並不會重新加載網絡傳遞的過來的java.lang.Integer,而直接返回已加載過的Integer.class,這樣便可以java.lang.SecurityException: Prohibited package name: java.lang
© 著作權歸作者所有,轉載或內容合作請聯繫作者
鏈接:https://www.jianshu.com/p/9df9d318e838
來源:簡書