JVM中存在三個預設的類加載器:
bootstrap ClassLoader、ExtClassLoader、AppClassLoader
。
- BootStrapClassLoader是ExtClassLoader的⽗類加載器,預設負責加載%JAVA_HOME%lib下的 jar包和class⽂件。
- ExtClassLoader是AppClassLoader的⽗類加載器,負責加載%JAVA_HOME%/lib/ext⽂件夾下的 jar包和class類。
- AppClassLoader是⾃定義類加載器的⽗類,負責加載classpath下的類⽂件。
AppClassLoader的⽗加載器是ExtClassLoader,ExtClassLoader的⽗加載器是 BootstrapClassLoader。
- 如果一個類加載器收到類加載請求,它并不會自己先去加載,而是把這個請求委托給父類加載器去執行。
- 如果父類還存在父類,則進一步委托,依次遞歸,直到到達啟動類加載器。
- 如果父類加載器能完成,則成功傳回,不能完成則子類才會嘗試自己去加載。
- 避免類的重複加載
- 避免了java的核心API被篡改