學習java、Android也有差不多半年時間了,是時候記錄一下學習過程中的心得和經驗,這篇文章就是簡單描述一下JVM加載class文件的機制。
Java中的類加載器實質上也是類,功能是把類載入jvm中,值得注意的是jvm的類裝載器并不是一個,而是三個: 1. BootstrapLoader 啟動類裝載器 : 每個Java虛擬機實現都必須有一個啟動類裝載器。它只負責在系統類(核心Java API的class文件)的安裝路徑中查找要裝入的類。這個裝載器的實現由C++ 所撰寫而成,是JVM實現的一部分。 2. ExtClassLoader 擴展類裝載器:負責除核心Java API以外的其它class文件的裝載。例如、用于安裝或下載標準擴展的class文件,在類路徑中發現的類庫的class文件,用于應用程序運行的class文件等等。 3. AppClassLoader 用戶自定義類裝載器:負責除核心Java API以外的其它class文件的裝載。這里有一點需要注意:自定義類裝載器并非由應用程序員自己實現,它也是JVM
當我們使用命令來執行某一個Java程序(比如Test.class)的時候:java Test (1) java.exe 會幫助我們找到 JRE ,接著找到位于 JRE 內部的 jvm.dll ,這才是真正的 Java 虛擬機器 , 最后加載動態庫,激活 Java 虛擬機器。 (2) 虛擬機器激活以后,會先做一些初始化的動作,比如說讀取系統參數等。一旦初始化動作完成之后,就會產生第一個類裝載器 ―― BootstrapLoader(啟動類裝載器 ) 。 (3) Bootstrap Loader 所做的初始工作中,除了一些基本的初始化動作之外,最重要的就是加載 Launcher.java 之中的 ExtClassLoader(擴展類裝載器) ,并設定其 Parent 為 null ,代表其父加載器為 BootstrapLoader 。 (4) 然后 Bootstrap Loader 再要求加載 Launcher.java 之中的 AppClassLoader(用戶自定義類裝載器 ) ,并設定其 Parent 為之前產生的 ExtClassLoader 實體。這兩個加載器都是以靜態類的形式存在的。這里要注意的是, Launcher
新聞熱點
疑難解答