定义
双亲委派机制:
Java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该
类时才会将它的class文件加载到内存生成class对象。而且加载某个类的
class,文件时,Java虚拟机采用的是双亲委派模式,当类加载器需要加载某一个.class字节码文件时,则首先会把这个任务委托给他的上级类加载器,递归这个操作,如果上级没有加载该.class文件,自己才会去加载这个.class。
图片.png
image.png
JVM中提供了三层的ClassLoader:
Bootstrap classLoader: 主要负责加载核心的类库(java.lang.*等),构造ExtClassLoader和APPClassLoader。
ExtClassLoader:主要负责加载jre/lib/ext目录下的一些扩展的jar。
AppClassLoader:主要负责加载应用程序的主函数类
CustomClassLoader(用户自定义类加载器):可加载指定目录的class文件
沙箱安全机制
防止加载同一个.class,保证核心class不被篡改:通过委托的方式,保证核心.class不被篡改,即使被篡改也不会被加载,即使被加载也不会是同一个class对象,因为不同的加载器加载同一个.class也不是同一个Class对象。这样则保证了Class的执行安全。
比如定义一个名字叫String的类,所在包为java.lang。因为这个类本来是属于jdk的,如果没有沙箱安全机制的话,这个类将会污染到我所有的String,但是由于沙箱安全机制,所以就委托顶层的bootstrap加载器查找这个类,如果没有的话就委托extsion,extsion没有就到aapclassloader,但是由于String就是jdk的源代码,所以在bootstrap那里就加载到了,先找到先使用,所以就使用bootstrap里面的String,后面的一概不能使用,这就保证了不被恶意代码污染
image.png












网友评论