【JVM學習筆記】擴展類加載器


擴展類加載器獨有的特點,代碼如下

public class Sample {
}
public class Test {

    static {
        System.out.println("Test static block");
    }

    public static void main(String[] args) {
        System.out.println(Test.class.getClassLoader());
        System.out.println(Sample.class.getClassLoader());
    }
}

在控制台運行,結果如下

D:\workspace-learn\common-learn\learn-jvm\target\classes>java -Djava.ext.dirs=./ com.learn.jvm.loader.Test
Test static block
sun.misc.Launcher$AppClassLoader@334dcfad
sun.misc.Launcher$AppClassLoader@334dcfad

可以看到,即使我們已經通過 -Djava.ext.dirs=./ 指定了擴展類加載器的加載路徑,並且在該路徑下能夠找到Test類和Sample類,但是運行結果表明這兩個類依然是由系統類加載器所加載的。 

這是因為擴展類加載器只加載jar包

 

通過以下命令對Sample.class進行打包

jar cvf Sample.jar ./com/learn/jvm/loader/Sample.class

然后再次運行,結果如下

D:\workspace-learn\common-learn\learn-jvm\target\classes>java -Djava.ext.dirs=./ com.learn.jvm.loader.Test
Test static block
sun.misc.Launcher$AppClassLoader@397d812b
sun.misc.Launcher$ExtClassLoader@5eab4b89

可以看出,這次Sample類正常加載了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM