首页 > 其他 > 详细

jvm-learning-类加载器分类

时间:2020-09-24 10:19:59      阅读:46      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 技术分享图片

 

 

public class ClassLoaderTest {
    public static void main(String[] args) {
        //获取系统类加载器
        ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader();
        System.out.println(systemClassLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2

        //获取其上层:扩展类加载器
        ClassLoader extClassLoader = systemClassLoader.getParent();
        System.out.println(extClassLoader);//sun.misc.Launcher$ExtClassLoader@1b6d3586

        //获取其上层。:获取不到引导类加载器
        ClassLoader bootstrapClassLoader = extClassLoader.getParent();
        System.out.println(bootstrapClassLoader);//null

        //对于用户自定义类来所,他的类加载器是什么
        ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();
        System.out.println(classLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2

        //String类使用引导类加载器进行加载--》Java的核心类库都是使用引导类加载器的
        ClassLoader strclassLoader = String.class.getClassLoader();
        System.out.println(strclassLoader);
    }
}

 

启动类加载器(引导类加载器-Bootstrap ClassLoader)

 技术分享图片

 

 

扩展类加载器Extension ClassLoader

技术分享图片

 

 

应用程序类加载器(系统类加载器 AppClassLoader)

技术分享图片

 

 

public class ClassLoaderTest1 {
    public static void main(String[] args) {
        System.out.println("##################启动类加载器");
        //获取BootstrapClassLoader能够加载的api的路径
        URL[] urls = sun.misc.Launcher.getBootstrapClassPath().getURLs();
        for (URL url : urls) {
            System.out.println(url.toExternalForm());
        }
        /**
         * file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/rt.jar
         * file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/sunrsasign.jar
         * file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/jsse.jar
         * file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/jce.jar
         * file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/charsets.jar
         * file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/lib/jfr.jar
         * file:/C:/Program%20Files/Java/jdk1.8.0_202/jre/classes
         */

        //从上面路径种随意选择一个类,看看其类加载器是什么
        ClassLoader classLoader = Provider.class.getClassLoader();
        System.out.println(classLoader);//null ,代表是引导类加载器

        System.out.println("#################扩展类加载器");
        String extDirs = System.getProperty("java.ext.dirs");
        for (String path : extDirs.split(";")){
            System.out.println(path);
        }
        /**
         * #################扩展类加载器
         * C:\Program Files\Java\jdk1.8.0_202\jre\lib\ext
         * C:\WINDOWS\Sun\Java\lib\ext
         */

        //随便挑一个,看看类加载器
        ClassLoader classLoader1 = CurveDB.class.getClassLoader();
        System.out.println(classLoader1);//sun.misc.Launcher$ExtClassLoader@4b67cf4d
    }
}

 

用户自定义类加载器

技术分享图片

 

 技术分享图片

 

 

ClassLoader是什么

技术分享图片

 

 技术分享图片

 

 

获取ClassLoader的方式:

技术分享图片

 

 

public class ClassLoaderTest2 {
    public static void main(String[] args) {
        try {
            //1获取当前类String的加载器
            ClassLoader classLoader = Class.forName("java.lang.String").getClassLoader();
            System.out.println(classLoader);//null

            //2获取当前线程上下文ClassLoader
            ClassLoader classLoader1 = Thread.currentThread().getContextClassLoader();
            System.out.println(classLoader1);//sun.misc.Launcher$AppClassLoader@18b4aac2

            //3获取系统加载器
            ClassLoader classLoader2 = ClassLoader.getSystemClassLoader();
            System.out.println(classLoader2);//sun.misc.Launcher$AppClassLoader@18b4aac2
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }


    }
}

 

jvm-learning-类加载器分类

原文:https://www.cnblogs.com/java-quan/p/13722261.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!