java虚拟机对class文件采用的是按需加载的方式,也就是说当需要使用该类时才会将他的class文件加载到内存中生成class对象,而且加载莫格勒的class文件时,Java虚拟机采用的时双亲委派机制,即把请求交由父类处理,它是一种任务委派模式。
原理
如果一个类的加载器收到类加载的请求,他不会自己先去加载,而是把这个请求委托给自己的父类的加载器去执行。
如果父类加载器还存在其父类加载器,则进行向上委托,一次递归,请求最终到达顶层的启动类加载器。
如果父类加载器可以完成类加载任务,就成功返回,倘若父类加载器无法完成加载任务,自家在才会自己去加载。
为什么要采用双亲委派机制?
java虚拟机只会在不同的类的类名相同且加载该类
优势
- 避免类的重复加载
- 保护程序安全:保护核心API,防止被篡改
沙箱安全机制
在java程序中不允许为包名起核心包同名,如java.lang。
当你新建一个包叫做java.lang,并在其中添加自己的类,根据双亲委派机制,该部分代码会被向上委派到BootstrapClassLoader
BootstrapClassLoader具有沙箱安全机制,不允许在核心包中自定义类。