美文网首页
类加载器

类加载器

作者: 木木不哭_8be4 | 来源:发表于2020-12-20 20:21 被阅读0次

    两种累加载器

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

    由C和C++语言实现的

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

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

    image.png
    image.png

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

    类似于文件树

    4.代码验证

    • 如何获取类加载器
    • 各个类加载器的关系
    • Java核心包使用的什么类加载器
    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

    相关文章

      网友评论

          本文标题:类加载器

          本文链接:https://www.haomeiwen.com/subject/sjgknktx.html