大略來說,JVM 內建有一個 BootStrapClassLoader,用來作為所有 Java 類別的 ClassLoader
BootStrapClassLoader 會載入 JVM 必要的類別(像是 rt.jar)。
根據 [1] 的描述,可以利用以下的程式碼查看 BootStrapClassLoader 載入了哪些 jar。
URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs(); for (int i = 0; i < urls.length; i++) { System.out.println(urls[i].toExternalForm()); }
BootStrapClassLoader 在載入時,同時會載入第二個 ClassLoader:Extension ClassLoader
Extension ClassLoader 主要職責是載入 JAVA_HOME 裡面額外放的函式庫,即預設是載入 /lib/ext 資料夾內的東西。
Extension ClassLoader 最後會載入 App ClassLoader,就是載入使用者執行的應用程式的 class 了。