无招胜有招之Java进阶JVM(八)类加载机制
6.1.ClassLoader的兩個作用和一個任務
作用:1.將Class加載到JVM中2.審視每一個類應該由誰加載。
任務:將Class字節碼重新解析成統一要求的對象格式
?
6.2上級委托接待機制又稱雙親委托機制
?
6.3JVM提供的三層ClassLoader
?
| 1、Bootstrap ClassLoader 根類加載器/引導類加載器 負責Java核心類的加載 jdk安裝目錄\jre\lib目錄下rt.jar文件中 比如System,String等。 (這個加載器的是非常特殊的,它實際上不是ClassLoader的子類,而是由C/C++實現的。) ? 2、Extension ClassLoader 擴展類加載器 負責JRE的擴展目錄中jar包的加載。 jdk安裝目錄\jre\lib\ext目錄下 ? 3、System ClassLoader 系統類加載器/應用類加載器 負責在JVM啟動時加載我們自己寫的Java類編譯成的class文件和導入的jar包中的class文件 ? |
?
6.4JVM加載class文件到內存的兩種方式
?
6.5ClassLoader的加載機制
?
6.6.1ClassNotFoundException
?
6.6.2NoClassDefFoundError
?
?
?
6.6.3UnsatisfiedLinkError
?
6.6.4ClassCastException
強制類型轉換出錯
6.6類的熱部署
?
| 前面的分析,我們已經知道,JVM在加載類之前會檢查請求的類是否已經被加載過來,也就是要調用findLoadedClass方法查看是否能夠返回類實例。如果類已經加載過來,再調用loadClass會導致類沖突。 但是,JVM判斷一個類是否是同一個類有兩個條件:一是看這個類的完整類名是否一樣(包括包名),二是看加載這個類的ClassLoader加載器對象是否是同一個 所以,要實現類的熱部署可以創建不同的ClassLoader的實例對象,然后通過這個不同的實例對象來加載同名的類。 |
【補充】JAVA反射機制是在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用它的任意方法和屬性;這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。?
總結
以上是生活随笔為你收集整理的无招胜有招之Java进阶JVM(八)类加载机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 无招胜有招之Java进阶JVM(七)对象
- 下一篇: 无招胜有招之Java进阶JVM(九)Ho