JVM——双亲委派模型
传送门
1. 什么是类加载器
在java语言中,类(class)只有被加载到JVM中才能被运行。当一个程序要运行时,JVM会将编译生成的.class文件加载到内存中去。这个加载的过程就是有类加载器(ClassLoader)实现的。
2. 类加载器有哪些
- 启动类加载器(Bootstrap ClassLoader):负责加载JAVA_HOME\lib目录中的,都是最基础的文件,是虚拟机的一部分,被虚拟机认可的类,是用c++编写的。
- 扩展类加载器(Extension ClassLoader):负责加载JAVA_HOME\lib\ext目录中的,是基础文件。
- 应用类加载器(App ClassLoader):也叫系统类加载器,负责加载用户路径(classpath)上的类库,第三方jar包和自己编写的java文件。
3. 什么是双亲委派模型
通过双亲委派机制协调三个加载器完成类的加载
- 双亲委派机制的具体过程
- 当应用类加载器接收到加载任务时,把任务委托给它的父加载器扩展类加载器;扩展类加载器接收到加载任务时,把任务继续委托给父加载器启动类加载器;
- 如果启动类加载器没有找到所需加载的类,就将此加载任务退回子加载器扩展类加载器;扩展类加载器也做同样的事情;
- 如果应用类加载器仍然没有找到所需的class文件,则抛出异常。
- 双亲委派机制的好处
确保类的全局唯一
如果自己写的类与核心类库中的类重名了,那么该类可以被编译,但无法被加载运行。因为按照双亲委派机制,该类会被委托到启动类类加载器加载,而启动类可以查到核心库中的类,并加载该核心类。
确保系统的安全
通过双亲委派机制,JVM总是先从核心库中查找类,这样可以防止不可信的类假扮成被信赖类对系统造成伤害