两种累加载器
1.引导类加载器(Bootstrap Classloader):
由C和C++语言实现的
2.自定义类加载器(User-Defined Classloader)
从概念上讲,自定义类加载器一般是指程序员手动编写的类加载器,但是JVM规范中并没有这样的定义,凡是派生于抽象类Classloader
的类加载器均为自定义类加载器 无论类加载器怎样划分,我们最常见的类加载器始终只有三个:引导类加载器,系统类加载器,扩展类加载器。
从一些类结构我们可以看出:都继承了Classloader
类
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
网友评论