為什么JVM的類加載要采用雙親委派的加載機制?


為什么JVM要采用雙親委派機制加載類呢?

任意一個類,都需要由加載它的類加載器和這個類本身一同確立其在Java虛擬機中的唯一性,每一個類加載器,都擁有一個獨立的類名稱空間。

也就是說,判斷2個類是否“相等”,只有在這2個類是由同一個類加載器加載的前提下才有意義,否則即使這2個類來源於同一個Class文件,被同一個虛擬機加載,只要加載它們的類加載器不同,這2個類必定不相等。

基於雙親委派模型設計,那么Java中基礎的類,Object類似Object類重復多次的問題就不會存在了,因為經過層層傳遞,加載請求最終都會被Bootstrap ClassLoader所響應。加載的Object類也會只有一個,否則如果用戶自己編寫了一個java.lang.Object類,並把它放到了ClassPath中,會出現很多個Object類,這樣Java類型體系中最最基礎的行為都無法保證,應用程序也將一片混亂。

雙親委派模型的好處:

1.主要是為了安全性,避免用戶自己編寫的類動態替換JAVA的一些核心類,比如String。

2.同時也避免了類的重復加載,因為JVM中區分不同類,不僅僅是根據類名,相同的class文件被不同的ClassLoader加載就是不同的兩個類。

在JVM中表示兩個class對象是否為同一個類對象存在兩個必要條件:

1.類的完整類名必須一致,包括包名。

2.加載這個類的ClassLoader(指ClassLoader實例對象)必須相同。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM