jvm学习-------加载器
加载器在虚拟机规范中主要分两类:引导类加载器和自定义类加载器(包括官方定义在jdk中的加载器)
引导类加载器(bootstrap Class Loader):是由C/C++语言编写的
自定义类加载器主要包括三大类:系统类加载器SystemClassLoader,扩展类加载器ExtClassLoader和自定义类加载器(这个才是我们程序员写的加载器)
1,引导类加载器(bootstrap Class Loader)
作用:加载java核心类库(比如:String)
2,系统类加载器(SystemClassLoader)
如何得到:systemClassLoader:可以由ClasslLoader.getSystemClassLoader获取到
作用:自定义的类就是被systemClassLoader加载的
3,扩展类加载器(ExtClassLoader)
ExtClassLoader:可以由systemClassLoader.getParent获取到。(并不是继承关系,他们都继承与ClassLoader抽象类)
双亲委派机制:在加载器被需要的时候才回去加载相应的类;
一个受到了类加载的请求,加载器不会直接加载,会先委托给父加载器,然后接着给它的父加载器直到引导类加载器位置。
如果可以加载则直接加载该类,如果不能再给儿子加载器加载,不能继续给它的儿子加载,直到最开始被委托的加载器为止。(所有类都在其中,不会出现类没有加载器加载的情况)
沙箱安全机制:保护java核心类库。
比如:我们自己定义了一个java.lang.String类但是根据双亲委派机制会让引导类先加载。这就是沙箱安全机制
两个class对象是否相同有两个必要条件:
1,类的完整类名一直,包括包名
2,加载这个类的ClassLoader必须相同
其他: