首先要明白,JVM中類加載器的主要作用是將.class文件從磁盤加載到內存中。
JVM的類加載器主要分為引導類加載器、擴展類加載器、系統類加載器。
引導類加載器(Bootstrap Class Loader)
主要任務:加載Java的核心類庫(JAVA_HOME/jre/lib/rt.jar、resources.jar或sunboot。class。path路徑下的內容)
那麼rt.jar和resources.jar裡邊有什麼呢?
rt.jar和resources.jar中含有JVM自身需要的類,供JVM運行使用,所以引導類加載器很重要
擴展類加載器(Extension Class Loader)
主要任務:加載jre/lib/ext子目錄下加載類庫。(放在這個目錄下的文件,都會由擴展類加載器加載)
系統類加載器(AppClassLoader)或者稱應用程序類加載器
主要任務:加載我們用戶自己寫的類
可以通過ClassLoader#getSystemClassLoader()方法獲取到類加載器
總結:
- 引導類加載器:加載JVM核心類
- 擴展類加載器:加載JVM使用的擴展類
- 系統類加載器:加載用戶自定的類
可見他們個類加載器所加載的類沒有互相重疊的部分,各自負責各自的部分,共同完成類加載任務。就像社會分工一樣,有的負責生產食品的,有負責生產生活日用品的,有負責生產奢飾品的,各自有各自的分工,共同推動社會的進步。
概括:JVM類加載器之間不是上下層關係,也不是子父類繼承關係,而是包含關係。從他們的任務來看,他們是合作分工關係。
閱讀更多 嘿嘿哎四個窩窩頭 的文章