Java的類載入器初學習
Java在需要使用類的時候,才會將類載入,Java的類載入是由類載入器來完成的。
在載入類時,每個類載入器會先將類的載入任務交給其parent,如果parent找不到,再由自己負責載入。即在載入類時,會以Bootstrap Loader——>Extended Loader——>System Loader的順序來尋找類,如果都找不到,就會丟出NoClassDefFoundError。需要注意到是,Bootstrap Loader通常由C編寫而成,而Extended Loader和System Loader是由Java編寫而成,下面的程式碼中某個輸出語句列印出null就是這個原因。
當在命令列模式下執行java XX.class指令後,java執行程式會嘗試找到JRE安裝目錄,尋找jvm.dll,啟動JVM並進行初始化,產生Bootstrap Loader,接著Bootstrap Loader載入Extended Loader和System Loader,並設定Extended Loader的parent為Bootstrap Loader,而System Loader定parent為Extended Loader,最後再載入XX.class。
public class classLoaderTest
{
public static void main(String[] args)
{
classLoaderTest test = new classLoaderTest();
Class<?> c = test.getClass();
ClassLoader loader = c.getClassLoader();
System.out.println(loader);
System.out.println(loader.getParent());
System.out.println(loader.getParent().getParent()); //輸出為:null
System.out.println(System.getProperty("sun.boot.class.path"));
System.out.println(System.getProperty("java.ext.dirs"));
System.out.println(System.getProperty("java.class.path"));
}
}
我的機子中的執行結果如下:
sun.misc.Launcher$AppClassLoader@19821f
sun.misc.Launcher$ExtClassLoader@addbf1
null
D:\Program Files\Java\jdk1.6.0_02\jre\lib\resources.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\rt.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\sunrsasign.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\jce.jar;D:\Program Files\Java\jdk1.6.0_02\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.6.0_02\jre\classes
D:\Program Files\Java\jdk1.6.0_02\jre\lib\ext;C:\WINDOWS\Sun\Java\lib\ext
D:\workspace\Test\bin
如果把classLoaderTest的.class檔案放在其他的目錄下,會有不同的執行結果。
相關文章
- 初學 PHP 類的自動載入PHP
- jvm學習筆記6:類載入器JVM筆記
- 類載入-載入時機學習
- Java 類載入器以及載入機制Java
- Java類載入器詳解Java
- Java-JVM-類載入器JavaJVM
- 關於java中的類載入器Java
- JVM學習-虛擬機器類載入機制JVM虛擬機
- 深入探討 Java 類載入器Java
- Java類載入器深入理解Java
- Java基礎-類載入器以及載入機制Java
- Java類載入機制與Tomcat類載入器架構JavaTomcat架構
- 《深入理解java虛擬機器》學習筆記6——類載入機制Java虛擬機筆記
- Java虛擬機器10:類載入器Java虛擬機
- java類載入Java
- java專案中的classpath和類載入器Java
- Java虛擬機器 —— 類的載入機制Java虛擬機
- Java虛擬機器類載入的過程Java虛擬機
- JVM學習(三)——類載入機制JVM
- 【JAVA】自定義類載入器實現類隔離Java
- java虛擬機器類載入機制Java虛擬機
- Java 虛擬機器類載入機制Java虛擬機
- 深入理解Java類載入器(ClassLoader)Java
- Java虛擬機器9:Java類載入機制Java虛擬機
- 《深入理解java虛擬機器》學習筆記8——Tomcat類載入器體系結構Java虛擬機筆記Tomcat
- 一個Java類的載入Java
- java類的載入過程Java
- JVM學習筆記——類載入機制JVM筆記
- 類載入器(JVM)JVM
- [轉載]初級Java程式設計師的學習路線Java程式設計師
- 探祕類載入器和類載入機制
- 類載入流程,類載入機制及自定義類載入器
- Java學習:反射的應用,依賴載入Java反射
- Java 虛擬機器之四:Java類載入機制Java虛擬機
- 虛擬機器類載入機制_類載入的過程虛擬機
- Java的類載入器與雙親委託機制Java
- Java虛擬機器(六):類載入機制Java虛擬機
- Java JVM——2.類載入器子系統JavaJVM