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必须相同

 其他:

 

 

 

 

posted @ 2020-12-30 11:15  L三木1121  阅读(115)  评论(0编辑  收藏  举报