java虚拟机(十)—类加载器介绍
- jvm支持两种类加载器,引导类加载器(Bootstrap ClassLoader)和自定义类加载器(User-Defined ClassLoader)。
- 从概念上讲,自定义加载器一般是指开发人员自定义的一类加载器,但是java虚拟机规范却没有这么定义,而是将所有派生于抽象类ClassLoader的类加载器都划分为自定义类加载器。
上图中,Bootstrap Class Loader 为引导类加载器,其他的都为自定义类加载器。
这里的四者的关系是包含关系,不是上层下层,也不是父子继承关系。
也可以从编写语言来分类,Bootstrap Class Loader是使用c和c++来编写,其他的是使用java语言编写。 - 类加载器初识
public class testsss {
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@119d7047
//试图获取引导类加载器
ClassLoader bootstrapClassLoader = extClassLoader.getParent();
System.out.println(bootstrapClassLoader);//null
//对于用户自定义类的加载器 ==> 使用系统类加载器加载
ClassLoader classLoader = testsss.class.getClassLoader();
System.out.println(classLoader);//sun.misc.Launcher$AppClassLoader@18b4aac2
//String类是使用引导类加载器加载, java的核心类库都是使用引导类加载器加载
ClassLoader classLoader1 = String.class.getClassLoader();
System.out.println(classLoader1);//null
}
}
》》》博主长期更新学习心得,推荐点赞关注!!!
》》》若有错误之处,请在评论区留言,谢谢!!!