1. 程式人生 > >JVM原始碼分析--ClassLoader類載入器

JVM原始碼分析--ClassLoader類載入器

本人原創,轉載請註明出處:https://www.cnblogs.com/javallh/p/10224187.html 

1、JDK已有類載入器:

 BootStrap ClassLoader (啟動類載入器)  執行的是rt.jar   原始碼由C++編寫,所以在java中讀取的時候以null表示

 Extension ClassLoader extends ClassLoader 執行的是%JAVA_HOME%/lib/ext/*.jar

 App ClassLoader extends ClassLoader 執行的是ClassPath

2、自定義類載入器 extends ClassLoader

 預設的載入順序:自定義類載入器--App ClassLoader--Extension ClassLoader--BootStrap ClassLoader      (遵循雙親委派模型,並無繼承關係!下面可以看原始碼)

程式體現:

package com.cloud.rest;

import lombok.var;
import org.junit.Test;

public class ClassLoaderTest {

    @Test
    public void
classLoderTest() { var loader = ClassLoaderTest.class.getClassLoader(); while (loader != null) { System.out.println(loader); loader = loader.getParent(); } System.out.println(loader); } }

如下效果分析:

[email protected]
sun.m[email protected]
null

載入機制可以體現,為null的輸出是因為載入BootStrap ClassLoader的時候由於BootStrap無法讀取,所以使用null來表示,也可以這樣說:如果某個類的父類載入器輸出為null,則表示它的父類載入器為BootStrap ClassLoader,(注意:此時的父類為雙親委派模型的概念,並不是類的繼承