类加载器

2020-12-20  本文已影响0人  木木不哭_8be4

两种累加载器

1.引导类加载器(Bootstrap Classloader):

由C和C++语言实现的

2.自定义类加载器(User-Defined Classloader)

从概念上讲,自定义类加载器一般是指程序员手动编写的类加载器,但是JVM规范中并没有这样的定义,凡是派生于抽象类Classloader的类加载器均为自定义类加载器 无论类加载器怎样划分,我们最常见的类加载器始终只有三个:引导类加载器,系统类加载器,扩展类加载器。
从一些类结构我们可以看出:都继承了Classloader

image.png
image.png

3.几种类加载器之间的关系

类似于文件树

4.代码验证

public class ClassloaderTest {
    /**
     * 如何获取类加载器
     * 各个类加载器的关系
     * Java核心包使用的什么类加载器
     */
    @Test
    public void testAllClassloader(){
        //1.获取系统类加载器  sun.misc.Launcher$AppClassLoader@18b4aac2
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println("systemClassLoader = " + systemClassLoader);
        //2. 扩展类加载器   sun.misc.Launcher$ExtClassLoader@555590
        ClassLoader extClassLoader = systemClassLoader.getParent();
        System.out.println("extClassLoader = " + extClassLoader);
        //3.试图获取 引导类加载器 null 无法获取
        ClassLoader bootstarpClassLoader = extClassLoader.getParent();
        System.out.println("bootstarpClassLoader = " + bootstarpClassLoader);

        //查看自己的类默认使用的是什么加载器 : sun.misc.Launcher$AppClassLoader@18b4aac2  和上个系统类加载器是同一个对象
        ClassLoader currentlassLoader = ClassloaderTest.class.getClassLoader();
        System.out.println("currentlassLoader = " + currentlassLoader);

        //查java 的Spring类使用的是什么加载器  NULL  可以推测为是  引导类加载器,JDK 的核心类库均为 引导类加载器
        ClassLoader stringClassLoader = String.class.getClassLoader();
        System.out.println("stringClassLoader = " + stringClassLoader);

    }
}

如有错误之处还请大家不要吝啬你们的批评~~欢迎大家指出
我的邮箱:amumulimerence@gmail.com

上一篇下一篇

猜你喜欢

热点阅读